How to Check Redirect Chains (301/302) & Fix Them

A redirect chain is what happens when a URL does not jump straight to its destination but through intermediate URLs first: http://example.com/page 301s to https://example.com/page, which 301s to https://www.example.com/page, which returns a 200. Each extra hop adds an HTTP round trip, and every hop is another rule that can break or mislabel the move. This guide covers why chains hurt SEO, how to read one hop by hop with a free redirect chain checker, and how to flatten any chain to one redirect.

What Is a Redirect Chain?

A redirect — specifically a 301, 302, 303, 307 or 308 response, not just any 3xx — says “the page you asked for now lives here” via a Location header. A chain is two or more stacked in a row:

GET http://example.com/old-page
  301 → https://example.com/old-page
  301 → https://www.example.com/old-page
  301 → https://www.example.com/new-page
  200 ← final page

The client must request each URL in turn. A redirect loop, by contrast, circles back on itself (A → B → A) and never resolves — browsers show ERR_TOO_MANY_REDIRECTS. Chains rarely appear on purpose: migrations stack — HTTPS on an old www-consolidation, then a replatform — with nobody cleaning up earlier rules.

Why Redirect Chains Hurt SEO

Latency compounds. Every hop costs at least one HTTP round trip — multiply hops by your visitors’ round-trip time. A hop crossing hosts adds DNS plus a fresh TCP/TLS handshake; a same-host hop can reuse the connection. Google’s site-move guide warns that “chaining redirects adds latency for users, and not all user agents and browsers support long redirect chains” — and page speed feeds the Core Web Vitals signals used in ranking.

Crawl budget is wasted on URLs that no longer exist. Every crawl spent following intermediate variants is a crawl not spent on real pages. Do not try to solve chains with robots.txt either: disallowing an intermediate URL hides the redirect itself from Googlebot, which then sees a block instead of a hop. Keep robots.txt limited to genuine crawl directives.

Chains are fragile. If any middle hop breaks, everything upstream dead-ends — including backlinks pointing at the original URL.

Mixed status codes send mixed signals. Google’s redirects documentation is explicit: for a 301, “the indexing pipeline uses the redirect as a signal that the redirect target should be canonical”; for a 302 it “doesn’t use the redirect as a signal”, and the source page stays in results. A 302 anywhere in a chain can delay or prevent consolidation. Google has also said long-standing 302s eventually get treated as permanent — just slower. The hop itself loses nothing: “301 and other permanent redirects don’t cause a loss in PageRank”, per Google’s site-move guide.

301 vs 302 vs 307 vs 308: Pick One and Mean It

  • 301 (Moved Permanently) — moved forever. The default for migrations, URL rewrites, http-to-https, and www consolidation.
  • 302 (Found) — temporary; the old URL stays canonical. For A/B tests, short promotions, geotargeting.
  • 307 / 308 — stricter temporary and permanent codes: the same method and body must be replayed.

Problems start when combined: you 301’d /old-lp to /spring-campaign years ago; this year marketing pointed /spring-campaign at a new page with a 302 because “it’s just the campaign”. That 301 → 302 chain half-asserts permanence. Decide once: permanent — every hop a 301; temporary — one 302 from the original URL.

How to Check a Redirect Chain Step by Step

The free Redirect Chain Checker follows the chain as a crawler sees it: every hop is a fresh HTTP GET — no cache, no cookies, no JavaScript, no HSTS upgrade — sent as user agent GeoToolsBot/1.0.

Step 1: Collect the URLs worth testing

Sources, not guesses: current and archived sitemaps, server access logs, Search Console’s Links report for externally linked pages — the same sources Google’s site-move guide recommends — plus http:// and non-www variants of top pages and backlink exports.

Step 2: Run the check

Paste a URL into the redirect chain checker and press Check redirects. The tool requests the URL with redirects disabled, reads Location, resolves it, repeats — up to six hops, with loop detection at every step. You get every hop with its status badge, URL and target, plus the final landing page and content type. A healthy reference we tested, http://github.com: one 301, then a 200.

Step 3: Read the issue list

The checker also flags what hurts: chains longer than three hops — matching Google’s advice to keep chains “ideally no more than 3 and fewer than 5”; hops still on plain http:// after the first hop, meaning delayed HTTPS upgrade; mixed permanent and temporary codes; cross-domain hops — leaving your registrable domain (the part you register: example.com, not shop.example.com), which Google treats as a site move with its own checklist including the Change of Address tool; non-HTML finals like a PDF; and 4xx/5xx finals. Circling URLs return a loop error instead of a chain.

Step 4: The engineer’s route for spot checks

curl -sI http://github.com          # first hop only
# HTTP/1.1 301 Moved Permanently
# Location: https://github.com/

curl -sIL http://www.apache.org     # headers for EVERY hop
# HTTP/1.1 301 Moved Permanently
# Location: https://www.apache.org/
# HTTP/2 200

curl -s -o /dev/null -w 'status=%{http_code} redirects=%{num_redirects} final=%{url_effective}n' -L http://github.com
# status=200 redirects=1 final=https://github.com/

Two cautions from our runs: -I sends a HEAD, and some servers treat HEAD differently — github.com hung on ours while the GET sailed through. And a 403 final is not always broken: at the time of writing, stackoverflow.com gave a clean 301, then a 403 for the bot. Re-check “broken” finals in a browser first.

How to Flatten a Chain to a Single Hop

The goal: any URL that redirects points directly at the final destination. No middlemen.

  1. Map the chain first. Write down the exact hops and status codes before touching anything.
  2. Rewrite the first hop. In nginx, put return 301 https://www.example.com/new-page; in the server block listening on port 80 (or the old host’s block). In Apache, Redirect 301 /old-page https://www.example.com/new-page needs mod_alias and lives in the vhost or .htaccess; it matches whole path segments, so /old-page also catches /old-page/sub — exact: RedirectMatch 301 ^/old-page$ https://…/new-page. In WordPress, the Redirection plugin manages the map in the database.
  3. Retire or repoint middle hops. Before deleting a rule, verify nothing real points there: check your backlink export and grep the access log. External links still landing on the middle URL? Repoint it too.
  4. Fix internal links. Redirects are for URLs you cannot change — other people’s backlinks. Point your own links at the final URL; internal links are often the single largest source of chains.
  5. Re-check and update your sitemap. Confirm one hop with the right status in the chain checker. Then regenerate the sitemap so it lists only final URLs and submit it in Search Console’s Sitemaps report; the free XML sitemap generator handles generation.

Consolidating http and www? One hop, not two rules each doing half the job — http://example.com gets forced through https://example.com before https://www.…, and mis-ordered force-TLS/force-www rules are the classic loop cause:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

One more trap: some rules silently drop query strings. Apache’s mod_alias Redirect passes GET parameters through, but a RewriteRule whose target contains its own ? discards the original query string unless you add [QSA] ([QSD] discards on purpose). A stripped campaign URL like /?utm_source=newsletter breaks analytics — build links with a UTM builder and verify the parameters survive.

Common Mistakes to Avoid

  • Stacking migrations. http→https, then www, then a replatform — each layering redirects on the last.
  • Using 302 for permanent moves because it was the CMS default.
  • Trusting the browser as the test. Browsers cache 301s aggressively, and HSTS upgrades http to https before the first request — your browser can show fewer hops than exist.
  • Fixing only the first hop. Middle hops still receive link equity from old backlinks.
  • Blocking intermediate URLs in robots.txt to “save crawl budget” — Googlebot never sees the redirect.
  • Redirecting to whatever was handy instead of an equivalent page — not fixed, just shorter.

Frequently Asked Questions

How many redirects in a chain is too many?

Google’s site-move guide: Googlebot follows up to 10 hops, but advises going straight to the destination, keeping chains “ideally no more than 3 and fewer than 5”. The checker aligns — flags over three hops, stops after six.

Do 301 redirects lose PageRank?

No — Google’s site-move documentation states that “301 and other permanent redirects don’t cause a loss in PageRank”, and Gary Illyes of Google said the same in a 2016 tweet. Chains still cost you latency, crawl budget, fragile rules, and temporary codes that delay consolidation.

What is the difference between a redirect chain and a redirect loop?

A chain eventually reaches a real page: A → B → C → 200. A loop circles back on itself — A → B → A — and never resolves; browsers show ERR_TOO_MANY_REDIRECTS. The fix differs: loops need the conflicting rules found and broken, not one hop repointed.

Why does my browser show a different chain than the checker?

Two mechanisms. Browsers cache redirects, 301s hardest — Chrome keeps honoring a cached redirect long after the rule changed. And HSTS: having seen the Strict-Transport-Security header (or via the preload list), a browser upgrades http to https before the first request, hiding that hop. The checker requests each URL fresh with no HSTS list.

How do I fix a redirect chain in WordPress?

Most come from layering plugin redirects, .htaccess/nginx rules, and HTTPS/www rewrites. Inventory every source — the Redirection plugin’s redirect list and its Logs screen, your server config, any SEO plugin’s redirects — then rewrite each entry so the original URL hits the final destination in one 301. Update internal links and re-verify with the checker.

How long does Google take to pick up fixed redirects?

Recrawling happens per URL at Googlebot’s pace — typically a few weeks for small-to-medium sites, longer for large ones. Speed it up by requesting indexing via Search Console’s URL Inspection tool and submitting the updated sitemap. Fluctuations during reprocessing are normal.

How long should I keep old 301 rules?

Google recommends keeping redirects at least a year — ideally longer — so signals transfer and external sites update links. Before removing any, confirm no remaining backlinks (check your link export) and no real traffic in your access logs.

Can I check redirect chains in bulk?

The free checker handles one URL per run. For a full-site audit, crawl with a desktop crawler such as Screaming Frog — which Google’s migration guide suggests — export every 3xx response, and funnel the worst offenders through the checker before rewriting rules.

如何检查重定向链(301/302)并修复

重定向链指的是这样一种情况:一个 URL 不是一步跳到目的地,而是先经过若干中间 URL:http://example.com/page 先 301 到 https://example.com/page,后者再 301 到 https://www.example.com/page,最终返回 200。每多一跳就多一次 HTTP 往返,而且每一跳都是一条可能出错、也可能给迁移贴错标签的规则。本指南将讲解重定向链为何损害 SEO、如何用免费的重定向链检查器逐跳读取整条链路,以及如何把任何一条链压平成一次重定向。

什么是重定向链?

重定向——具体来说是 301、302、303、307 或 308 响应,而不是随便哪个 3xx——通过 Location 响应头告知客户端“你要的页面现在在这里”。所谓链,就是两条或多条重定向首尾相连:

GET http://example.com/old-page
  301 → https://example.com/old-page
  301 → https://www.example.com/old-page
  301 → https://www.example.com/new-page
  200 ← final page

客户端必须依次请求每一个 URL。与之相对,重定向循环会绕回自身(A → B → A),永远没有终点——浏览器会显示 ERR_TOO_MANY_REDIRECTS。重定向链很少是有意为之:迁移往往层层叠加——在旧的 www 合并之上启用 HTTPS,之后再更换平台——却没有人清理早期的规则。

重定向链为何损害 SEO

延迟会层层叠加。每一跳至少耗费一次 HTTP 往返——用跳数乘以访客的往返时延,代价一目了然。跨主机的一跳还要追加 DNS 解析和一次全新的 TCP/TLS 握手;同主机的跳转则可以复用连接。Google 的网站迁移指南警告说“链接式重定向会增加用户延迟,而且并非所有用户代理和浏览器都支持过长的重定向链”——而页面速度正是排名所用 Core Web Vitals 信号的输入之一。

抓取预算被浪费在不复存在的 URL 上。每一次花在跟踪中间变体上的抓取,都是从真实页面那里抢来的。也不要试图用 robots.txt 解决链的问题:Disallow 一个中间 URL 会让 Googlebot 连重定向本身都看不到,它看到的将是一次拦截而非一次跳转。让 robots.txt 只承担真正的抓取指令。

链很脆弱。中间任何一跳断掉,其上游的一切都会走进死胡同——包括指向原始 URL 的外链。

混杂的状态码传递混杂的信号。Google 的重定向文档写得明明白白:对 301,“索引流水线会把该重定向视为‘重定向目标应为规范网址’的信号”;对 302,它“不会把重定向当作信号使用”,源页面会继续留在搜索结果里。链中任何位置的一个 302 都可能推迟甚至阻止权重合并。Google 还说过,存在已久的 302 最终会被当作永久重定向——只是更慢。跳转本身不损失任何东西:按照 Google 网站迁移指南的说法,“301 及其他永久重定向不会导致 PageRank 流失”。

301、302、307、308:选定一种,贯彻到底

  • 301(Moved Permanently,永久移动)——永久迁移。网站迁移、URL 重写、http 升级 https、www 合并的默认选择。
  • 302(Found,临时重定向)——临时跳转;旧 URL 仍是规范网址。适用于 A/B 测试、短期促销、地理定向。
  • 307 / 308——更严格的临时与永久状态码:必须以相同的请求方法和请求体重放。

问题始于混用:几年前你把 /old-lp 301 到了 /spring-campaign;今年市场部又用 302 把 /spring-campaign 指向一个新页面,理由是“这只是个活动页”。这条 301 → 302 的链把永久性只宣告了一半。一次性定夺:永久——每一跳都是 301;临时——从原始 URL 发出一个 302。

如何逐步检查一条重定向链

免费的重定向链检查器以爬虫的视角跟踪链路:每一跳都是一次全新的 HTTP GET——不带缓存、不带 Cookie、不执行 JavaScript、不做 HSTS 升级——user agent 为 GeoToolsBot/1.0。

第 1 步:收集值得测试的 URL

要数据来源,不要凭空猜测:当前与历史 sitemap、服务器访问日志、Search Console 的“链接”报告(用于找出被外部链接的页面)——这正是 Google 网站迁移指南推荐的信息源——再加上重点页面的 http:// 与无 www 变体,以及外链导出数据。

第 2 步:运行检查

把 URL 粘贴进重定向链检查器,按下 Check redirects(检查重定向)。工具在禁用自动跳转的状态下请求该 URL,读取 Location,解析后继续——最多六跳,每一步都做循环检测。你会看到每一跳的状态徽章、URL 和目标地址,以及最终落地页与内容类型。我们实测的健康参照 http://github.com:一次 301,随后 200。

第 3 步:阅读问题列表

检查器还会标记真正有害的情况:超过三跳的链——对应 Google“理想不超过 3 跳、务必少于 5 跳”的建议;第一跳之后仍是明文 http:// 的跳转,说明 HTTPS 升级被延误;永久与临时状态码混用;跨域跳转——离开你的可注册域(你注册的那一部分:example.com,而非 shop.example.com),Google 会将其视为一次网站迁移,附带专属检查清单(包括“地址更改”工具);以 PDF 等非 HTML 页面收尾;以及以 4xx/5xx 收尾。绕圈的 URL 返回的是循环错误而非一条链。

第 4 步:工程师的抽查路线

curl -sI http://github.com          # first hop only
# HTTP/1.1 301 Moved Permanently
# Location: https://github.com/

curl -sIL http://www.apache.org     # headers for EVERY hop
# HTTP/1.1 301 Moved Permanently
# Location: https://www.apache.org/
# HTTP/2 200

curl -s -o /dev/null -w 'status=%{http_code} redirects=%{num_redirects} final=%{url_effective}n' -L http://github.com
# status=200 redirects=1 final=https://github.com/

实测中有两点提醒:-I 发送的是 HEAD 请求,而部分服务器对 HEAD 另眼相待——github.com 在我们这里挂起过,GET 却一路畅通。此外,最终 403 不一定就是坏了:截至撰写本文时,stackoverflow.com 先给出干净的 301,随后对爬虫返回 403。请先在浏览器里复查那些“失效”的最终页面。

如何把链压平成单次跳转

目标是:任何发生重定向的 URL 都直接指向最终目的地。没有中间人。

  1. 先画清链路。在动手之前,把确切的每一跳和状态码记录下来。
  2. 改写第一跳。在 nginx 中,把 return 301 https://www.example.com/new-page; 放进监听 80 端口的 server 块(或旧主机的 server 块)。在 Apache 中,Redirect 301 /old-page https://www.example.com/new-page 依赖 mod_alias,写在 vhost 或 .htaccess 里;它按整个路径段匹配,所以 /old-page 也会命中 /old-page/sub——要精确匹配就用 RedirectMatch 301 ^/old-page$ https://…/new-page。在 WordPress 中,Redirection 插件把这张映射表管理在数据库里。
  3. 停用或改指中间跳。删除规则之前,先确认没有真实来源指向那里:检查外链导出数据,并 grep 访问日志。仍有外部链接落在中间 URL 上?把它也一并改指。
  4. 修正内链。重定向是为那些你改不了的 URL 准备的——别人的外链。自己的链接直接指向最终 URL;内链往往是重定向链最大的单一来源。
  5. 复查并更新 sitemap。在链检查器里确认只剩状态码正确的一跳。然后重新生成 sitemap,使其只列出最终 URL,并在 Search Console 的“Sitemaps”报告里提交;生成交给免费的XML sitemap 生成器即可。

要合并 http 和 www?一次跳转就够,别写两条各干一半的规则——http://example.com 会被迫先经过 https://example.com 再去 https://www.…,而顺序写反的强制 TLS/强制 www 规则正是经典的循环诱因:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

再有一个陷阱:有些规则会悄悄丢弃查询字符串。Apache 的 mod_alias Redirect 会把 GET 参数原样传递,但 RewriteRule 的目标一旦自带 ?,原始查询字符串就会被丢弃,除非加上 [QSA]([QSD] 是刻意丢弃)。像 /?utm_source=newsletter 这样的活动链接一旦被剥掉参数,统计就会失真——请用UTM 构建器生成链接,并确认参数完好送达。

应避免的常见错误

  • 迁移层层叠加。先 http→https,再 www,然后换平台——每一层都把重定向叠在上一层之上。
  • 用 302 处理永久迁移,只因为它是 CMS 的默认设置。
  • 把浏览器当测试依据。浏览器会激进地缓存 301,HSTS 还会在第一次请求之前就把 http 升级成 https——浏览器里显示的跳数可能少于实际。
  • 只修第一跳。中间跳仍在接收旧外链传来的链接权重。
  • 为了“节省抓取预算”在 robots.txt 里屏蔽中间 URL——Googlebot 从此看不到那次重定向。
  • 随手把页面重定向到某个现成页面,而非对等页面——问题没修复,只是链更短。

常见问题

一条重定向链有多少跳算过多?

按照 Google 网站迁移指南:Googlebot 最多会跟随 10 跳,但建议直达目的地,链长“理想不超过 3 跳、务必少于 5 跳”。检查器与之对齐——超过三跳即标记,六跳后停止。

301 重定向会损失 PageRank 吗?

不会——Google 的网站迁移文档明确写道“301 及其他永久重定向不会导致 PageRank 流失”,Google 的 Gary Illyes 也在 2016 年的一条推文里说过同样的话。但重定向链仍会让你付出代价:延迟、抓取预算、脆弱的规则,以及推迟权重合并的临时状态码。

重定向链和重定向循环有什么区别?

链最终会到达一个真实页面:A → B → C → 200。循环则绕回自身——A → B → A——永远没有结果;浏览器会显示 ERR_TOO_MANY_REDIRECTS。修法也不同:循环需要找出并拆除相互冲突的规则,而不是把某一跳改指。

为什么我的浏览器显示的链与检查器不同?

有两个机制。其一是浏览器会缓存重定向,301 缓存得最顽固——规则早已更改,Chrome 仍会长时间沿用缓存的重定向。其二是 HSTS:浏览器一旦见过 Strict-Transport-Security 响应头(或通过预加载列表获知),就会在第一次请求之前把 http 升级为 https,从而藏起那一跳。检查器每次都是全新请求,不带任何 HSTS 列表。

如何修复 WordPress 里的重定向链?

大多数链来自插件重定向、.htaccess/nginx 规则与 HTTPS/www 重写的层层叠加。请盘点每一个来源——Redirection 插件的重定向列表及其日志(Logs)页面、服务器配置、任何 SEO 插件里的重定向——然后逐条改写,让原始 URL 一次 301 直达最终目的地。更新内链,再用检查器复查。

Google 需要多久才能识别修复后的重定向?

重新抓取按 URL 逐个进行,节奏由 Googlebot 决定——中小型网站通常几周,大型网站更久。可以通过 Search Console 的“网址检查”工具请求编入索引并提交更新后的 sitemap 来加快进度。重新处理期间出现波动属正常现象。

旧的 301 规则应该保留多久?

Google 建议重定向至少保留一年——理想更久——以便信号完成传递、外部网站更新链接。删除任何规则之前,先确认已无剩余外链(检查链接导出数据),访问日志里也没有真实流量。

能批量检查重定向链吗?

免费检查器每次处理一个 URL。若要做全站审计,可用 Screaming Frog 之类的桌面爬虫抓取——Google 的迁移指南也推荐此法——导出所有 3xx 响应,再在改写规则之前把最严重的链条送进检查器逐一确认。

リダイレクトチェーンの確認と修正方法(301/302)

リダイレクトチェーンとは、URLが最終目的地へ直接ジャンプせず、途中のURLを経由してから到達する状態のことです。http://example.com/pageが301でhttps://example.com/pageへ、さらに301でhttps://www.example.com/pageへと移され、そこでようやく200が返る——これがチェーンです。余分なホップ1つごとにHTTPのラウンドトリップが1回増えます。しかも各ホップはそれ自体がルールであり、壊れたり、移動の性質を誤って示したりする可能性を持ちます。このガイドでは、チェーンがSEOを損なう理由、無料のRedirect Chain Checkerでチェーンをホップごとに読む方法、そしてどんなチェーンでも1回のリダイレクトに平坦化する手順を解説します。

リダイレクトチェーンとは何か

リダイレクト——単なる3xxではなく、具体的には301、302、303、307、308のいずれかのレスポンス——は、「リクエストされたページは今はここにある」というメッセージをLocationヘッダーで伝えます。チェーンとは、このリダイレクトが2つ以上連なった状態です:

GET http://example.com/old-page
  301 → https://example.com/old-page
  301 → https://www.example.com/old-page
  301 → https://www.example.com/new-page
  200 ← final page

クライアントは、各URLを順番にリクエストしなければなりません。対してリダイレクトループは自分自身へ巡り戻る(A → B → A)もので、永遠に解決しません。ブラウザにはERR_TOO_MANY_REDIRECTSと表示されます。チェーンが意図的に作られることはまれです。移行は積み重なります——古いwww統一の上にHTTPS化、その上にリプラットフォーム——そして、誰も以前のルールを片付けません。

リダイレクトチェーンがSEOを損なう理由

レイテンシが複利で効いてくる。ホップごとに少なくとも1回のHTTPラウンドトリップがかかります。ホップ数に訪問者のラウンドトリップ時間を掛けてみてください。ホストをまたぐホップにはDNS解決に加えて新しいTCP/TLSハンドシェイクが発生し、同一ホストのホップなら接続を再利用できます。Googleのサイト移行ガイドは「リダイレクトの連鎖はユーザーのレイテンシを増やし、すべてのユーザーエージェントやブラウザが長いリダイレクトチェーンをサポートしているわけではない」と警告しています。しかもページ速度は、ランキングに使われるCore Web Vitalsのシグナルに反映されます。

存在しないURLにクロール予算が浪費される。中間URLを追うために使った1クロールは、本物のページに使えなかった1クロールです。チェーンをrobots.txtで解決しようとするのも禁物です。中間URLをdisallowすると、リダイレクト自体がGooglebotから隠れ、Googlebotにはホップの代わりにブロックが見えてしまいます。robots.txtは、本来のクロール制御の指示だけに留めましょう。

チェーンは壊れやすい。途中のホップが1つでも壊れると、その上流すべてが行き止まりになります。元のURLを指しているバックリンクも道連れです。

ステータスコードの混在は、シグナルの混在を生む。Googleのリダイレクトのドキュメントは明快です。301については「インデックス処理のパイプラインは、リダイレクト先を正規URL(canonical)とすべきだというシグナルとしてリダイレクトを使用する」。302については「リダイレクトをシグナルとして使用しない」ため、送り元のページが検索結果に残ります。チェーンのどこかに302があるだけで、統合が遅れたり妨げられたりします。Googleは、長期間置かれた302も最終的には恒久的として扱われる——ただしそれは遅い——とも述べています。ホップ自体は何も失いません。Googleのサイト移行ガイドいわく、「301およびその他の恒久的なリダイレクトはPageRankの損失を引き起こさない」のです。

301 vs 302 vs 307 vs 308:どれか1つを選び、その意味を貫く

  • 301(Moved Permanently)——永久に移動。移行、URL書き換え、http→https、www統一のデフォルト。
  • 302(Found)——一時的。古いURLが正規URLのまま残ります。A/Bテスト、短期プロモーション、ジオターゲティング向け。
  • 307 / 308——より厳格な一時・恒久コード。同じメソッドとボディをそのまま再送することが要求されます。

問題は組み合わせたときに始まります。何年も前に/old-lpから/spring-campaignへ301を設定した。今年、マーケティングが「ただのキャンペーンだから」と/spring-campaignを302で新ページへ向けてしまった。この301 → 302のチェーンは、恒久性を半分だけ主張している状態です。一度だけ決めましょう。恒久的なら——すべてのホップを301に。一時的なら——元のURLから1回だけ302を。

リダイレクトチェーンをステップごとに確認する方法

無料のRedirect Chain Checkerは、クローラーが見るのと同じ形でチェーンをたどります。各ホップは、キャッシュなし、Cookieなし、JavaScriptなし、HSTSによるアップグレードなしの、まっさらなHTTP GET——ユーザーエージェントはGeoToolsBot/1.0です。

ステップ1:テストする価値のあるURLを集める

推測ではなく情報源から集めます。現在および過去のサイトマップ、サーバーのアクセスログ、外部からリンクされているページならSearch Consoleのリンクレポート——Googleのサイト移行ガイドが勧める情報源と同じです——に加えて、主要ページのhttp://版と非www版、そしてバックリンクのエクスポート。

ステップ2:チェックを実行する

Redirect Chain CheckerにURLを貼り付けて、Check redirectsを押します。ツールは、リダイレクトを無効にした状態でそのURLをリクエストし、Locationを読み取り、解決して、またリクエストする——これを最大6ホップまで繰り返し、各ステップでループを検出します。結果には、各ホップのステータスバッジ、URLとターゲットに加え、最終ランディングページとコンテンツタイプが表示されます。私たちがテストした健全な参考例、http://github.com:301が1回、その後200。

ステップ3:問題リストを読む

チェッカーは、害になるものにもフラグを立てます。3ホップを超えるチェーン——Googleが「理想的には3ホップ以内、最大でも5ホップ未満に」と助言するのと同じ基準。1ホップ目以降もプレーンなhttp://のままのホップ——HTTPSアップグレードの遅れを意味します。恒久コードと一時コードの混在。クロスドメインのホップ——登録可能なドメイン(登録する単位。shop.example.comではなくexample.com)から出ていくホップで、Googleはこれをサイト移行として扱い、住所変更ツール(Change of Address)を含む独自のチェックリストの対象になります。PDFのようなHTML以外の最終ページ。そして4xx/5xxの最終ページ。循環するURLには、チェーンの代わりにループエラーが返ります。

ステップ4:スポットチェックのエンジニア流

curl -sI http://github.com          # first hop only
# HTTP/1.1 301 Moved Permanently
# Location: https://github.com/

curl -sIL http://www.apache.org     # headers for EVERY hop
# HTTP/1.1 301 Moved Permanently
# Location: https://www.apache.org/
# HTTP/2 200

curl -s -o /dev/null -w 'status=%{http_code} redirects=%{num_redirects} final=%{url_effective}n' -L http://github.com
# status=200 redirects=1 final=https://github.com/

私たちの実行で判明した注意点が2つ。-IはHEADリクエストを送りますが、HEADを特別扱いするサーバーがあります。実際、github.comはこちらのHEADでハングし、GETはすんなり通りました。また、最終が403でも、必ずしも壊れているとは限りません。執筆時点でstackoverflow.comは、きれいな301を返した後、ボットに403を返しました。「壊れた」最終ページは、まずブラウザで再確認しましょう。

チェーンを1ホップに平坦化する方法

目標は、リダイレクトするどのURLも、最終目的地を直接指すようにすることです。仲介役は要りません。

  1. まずチェーンをマッピングする。何かに手を付ける前に、正確なホップとステータスコードを書き出します。
  2. 最初のホップを書き換える。nginxなら、ポート80で待ち受けるserverブロック(または旧ホストのブロック)にreturn 301 https://www.example.com/new-page;を置きます。Apacheなら、Redirect 301 /old-page https://www.example.com/new-pageはmod_aliasを必要とし、vhostか.htaccessに記述します。このディレクティブはパスセグメント全体にマッチするため、/old-pageは/old-page/subも捕まえます。完全一致にするならRedirectMatch 301 ^/old-page$ https://…/new-page。WordPressなら、Redirectionプラグインがデータベース上でマッピングを管理します。
  3. 中間ホップを廃止するか、向き先を変える。ルールを削除する前に、実在するものがそこを指していないことを確認します。バックリンクのエクスポートを確認し、アクセスログをgrepしましょう。中間URLにまだ外部リンクが着地しているなら、その向き先も変えます。
  4. 内部リンクを修正する。リダイレクトは、自分では変更できないURL——他の人のバックリンク——のためのものです。自分のリンクは最終URLを直接指しましょう。内部リンクは、しばしばチェーンの最大の発生源です。
  5. 再チェックし、サイトマップを更新する。Redirect Chain Checkerで、適切なステータスの1ホップになっていることを確認します。次にサイトマップを再生成して最終URLだけを載せ、Search Consoleのサイトマップレポートから送信します。生成は無料のXML Sitemap Generatorで行えます。

httpとwwwを統一するケースでも、答えは1ホップです。各々が仕事を半分ずつこなす2つのルールにしてはいけません。http://example.comがhttps://www.…へ着く前にhttps://example.comを通される形、そして順序を誤ったforce-TLS/force-wwwルールが、典型的なループの原因です:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

もう1つの落とし穴。ルールの中には、クエリ文字列を黙って捨てるものがあります。Apacheのmod_aliasのRedirectはGETパラメータを引き継ぎますが、ターゲット自体に?を含むRewriteRuleは、[QSA]を付けない限り元のクエリ文字列を破棄します([QSD]は意図的に破棄するためのものです)。/?utm_source=newsletterのようなパラメータが剥がされたキャンペーンURLは、アナリティクスを壊します。UTMビルダーでリンクを作り、パラメータが生き残ることを確認しましょう。

避けるべきよくある間違い

  • 移行の積み重ね。http→https、その後www、その後リプラットフォーム——それぞれが前のリダイレクトの上に重なります。
  • 恒久的な移動に302を使う。理由は、CMSのデフォルトだったから。
  • ブラウザをテストとして信用する。ブラウザは301を積極的にキャッシュしますし、HSTSは最初のリクエストの前にhttpをhttpsへアップグレードします。実際に存在するより少ないホップ数が表示されることがあります。
  • 最初のホップだけ直す。中間ホップには今も、古いバックリンクからのリンクエクイティが届いています。
  • 「クロール予算を節約する」ために中間URLをrobots.txtでブロックする。Googlebotはリダイレクトを一切見られなくなります。
  • 同等のページではなく、手近なページへリダイレクトする。修正ではなく、単に短くなっただけです。

よくある質問

チェーン内のリダイレクトは何回から多すぎますか?

Googleのサイト移行ガイドでは、Googlebotは最大10ホップまで追跡するものの、目的地へ直接リダイレクトし、チェーンは「理想的には3ホップ以内、最大でも5ホップ未満」にしておくよう助言しています。チェッカーもこれに揃えており、3ホップ超でフラグを立て、6ホップで停止します。

301リダイレクトでPageRankは失われますか?

いいえ。Googleのサイト移行ドキュメントは「301およびその他の恒久的なリダイレクトはPageRankの損失を引き起こさない」と明記しており、GoogleのGary Illyesも2016年のツイートで同じことを述べています。それでもチェーンにはコストが残ります。レイテンシ、クロール予算、壊れやすいルール、そして統合を遅らせる一時コードです。

リダイレクトチェーンとリダイレクトループの違いは何ですか?

チェーンは最終的に実在するページへたどり着きます(A → B → C → 200)。ループは自分自身へ巡り戻る——A → B → A——もので、永遠に解決せず、ブラウザにはERR_TOO_MANY_REDIRECTSと表示されます。修正方法も異なります。ループに必要なのは、衝突しているルールを見つけて断ち切ることであり、1つのホップの向き先を変えることではありません。

なぜブラウザとチェッカーで異なるチェーンが表示されるのですか?

原因は2つの仕組みです。1つは、ブラウザのリダイレクトキャッシュ。とりわけ301は強力で、Chromeはルールが変わってから久しくても、キャッシュされたリダイレクトに従い続けます。もう1つはHSTSです。Strict-Transport-Securityヘッダーを受け取った(またはpreloadリスト経由の)ブラウザは、最初のリクエストの前にhttpをhttpsへアップグレードし、そのホップを見えなくします。チェッカーはHSTSリストを持たず、各URLを毎回まっさらな状態でリクエストします。

WordPressでリダイレクトチェーンはどう修正しますか?

大半は、プラグインのリダイレクト、.htaccess/nginxのルール、HTTPS/wwwのリライトの積み重ねが原因です。あらゆる情報源を洗い出しましょう——Redirectionプラグインのリダイレクト一覧とログ画面、サーバー設定、SEOプラグインのリダイレクト。そして各エントリを、元のURLが1回の301で最終目的地へ到達する形に書き換えます。内部リンクを更新し、チェッカーで再検証しましょう。

修正したリダイレクトをGoogleが認識するまでどれくらいかかりますか?

再クロールはURLごとに、Googlebotのペースで行われます。小〜中規模サイトなら通常数週間、大規模サイトならそれ以上です。Search ConsoleのURL検査でインデックス登録をリクエストし、更新したサイトマップを送信すれば、早められます。再処理中の変動は正常です。

古い301ルールはどのくらい残しておくべきですか?

Googleは、シグナルが引き継がれ、外部サイトがリンクを更新できるよう、リダイレクトを少なくとも1年——理想的にはそれ以上——残しておくことを推奨しています。削除する前に、残っているバックリンクがないこと(リンクのエクスポートで確認)、アクセスログに実トラフィックがないことを確認しましょう。

リダイレクトチェーンを一括で確認できますか?

無料チェッカーは1回の実行につき1URLです。サイト全体の監査には、Googleの移行ガイドが挙げているScreaming Frogなどのデスクトップクローラーでクロールし、3xxレスポンスをすべてエクスポートして、ルールを書き換える前に、問題の大きいものから順にチェッカーへ通しましょう。

리다이렉트 체인 확인 및 수정 방법 (301/302)

리다이렉트 체인은 URL이 목적지로 곧장 이동하지 않고 중간 URL들을 거쳐 가면서 생깁니다. http://example.com/page가 https://example.com/page로 301 리다이렉트되고, 이 URL이 다시 https://www.example.com/page로 301 리다이렉트되어 마침내 200을 반환하는 식입니다. 홉이 하나 늘 때마다 HTTP 왕복이 한 번씩 추가되고, 각 홉은 깨지거나 이동의 성격을 잘못 표시할 수 있는 규칙 하나이기도 합니다. 이 가이드에서는 체인이 SEO를 해치는 이유, 무료 redirect chain checker로 체인을 홉별로 읽는 방법, 그리고 어떤 체인이든 리다이렉트 하나로 평탄화하는 방법을 다룹니다.

리다이렉트 체인이란 무엇인가요?

리다이렉트란 — 정확히는 아무 3xx나 아니라 301, 302, 303, 307, 308 응답 — Location 헤더를 통해 “요청하신 페이지는 이제 여기 있습니다”라고 알려주는 것을 말합니다. 체인은 이런 리다이렉트가 두 개 이상 줄지어 쌓인 상태입니다:

GET http://example.com/old-page
  301 → https://example.com/old-page
  301 → https://www.example.com/old-page
  301 → https://www.example.com/new-page
  200 ← final page

클라이언트는 각 URL을 차례로 요청해야 합니다. 반대로 리다이렉트 루프는 자기 자신으로 되돌아가(A → B → A) 영원히 끝나지 않으며, 브라우저는 ERR_TOO_MANY_REDIRECTS를 표시합니다. 체인이 의도해서 만들어지는 경우는 드뭅니다. 이전(migration)이 쌓이는 겁니다 — 과거의 www 통합 위에 HTTPS 적용, 그다음 사이트 재구축 — 그리고 아무도 앞선 규칙을 정리하지 않으면 그대로 남습니다.

리다이렉트 체인이 SEO를 해치는 이유

지연 시간이 누적됩니다. 홉 하나는 최소한 HTTP 왕복 한 번의 비용을 물립니다 — 홉 수에 방문자의 왕복 시간을 곱해 보세요. 호스트를 넘어가는 홉에는 DNS 조회와 새로운 TCP/TLS 핸드셰이크가 더해지지만, 같은 호스트 안의 홉은 연결을 재사용할 수 있습니다. Google의 사이트 이전 가이드는 “리다이렉트를 연결하면 사용자에게 지연이 추가되며, 모든 사용자 에이전트와 브라우저가 긴 리다이렉트 체인을 지원하는 것은 아니다”라고 경고합니다 — 그리고 페이지 속도는 순위에 사용되는 Core Web Vitals 신호로 이어집니다.

더 이상 존재하지 않는 URL에 크롤 예산이 낭비됩니다. 중간 변형 URL을 따라가는 데 쓴 크롤은 실제 페이지에 쓰이지 못한 크롤입니다. robots.txt로 체인을 해결하려 들지도 마세요: 중간 URL을 disallow하면 리다이렉트 자체가 Googlebot에게 숨겨져서, Googlebot은 홉 대신 차단을 보게 됩니다. robots.txt는 본래 목적인 크롤 지시어에만 한정해서 쓰세요.

체인은 물리기 쉽습니다. 중간의 어느 홉이든 하나라도 깨지면 그 위쪽 전체가 막다른 길이 됩니다 — 원본 URL을 가리키는 백링크까지 포함해서요.

뒤섞인 상태 코드는 뒤섞인 신호를 보냅니다. Google의 리다이렉트 문서는 명확합니다. 301은 “색인 파이프라인이 이 리다이렉트를 리다이렉트 대상이 canonical이어야 한다는 신호로 사용한다”이고, 302는 “리다이렉트를 신호로 사용하지 않으므로” 원본 페이지가 검색 결과에 남습니다. 체인 어디에든 302가 하나 있으면 통합이 늦어지거나 아예 안 될 수 있습니다. Google은 오래 방치된 302도 결국 영구 리다이렉트로 취급된다고 밝힌 바 있습니다 — 다만 더 느리게요. 홉 자체는 아무것도 잃지 않습니다. Google의 사이트 이전 가이드에 따르면 “301 및 기타 영구 리다이렉트는 PageRank 손실을 일으키지 않습니다”.

301 vs 302 vs 307 vs 308: 하나를 정하면 그 의미를 지키세요

  • 301 (Moved Permanently) — 영구 이동입니다. 사이트 이전, URL 재작성, http→https 전환, www 통합의 기본 선택입니다.
  • 302 (Found) — 임시 이동이며 기존 URL이 canonical로 남습니다. A/B 테스트, 짧은 프로모션, 지역 타기팅용입니다.
  • 307 / 308 — 더 엄격한 임시/영구 코드입니다: 동일한 메서드와 본문을 그대로 재전송해야 합니다.

문제는 섞일 때 시작됩니다. 몇 년 전에 /old-lp를 /spring-campaign로 301 리다이렉트했고, 올해 마케팅 팀이 “그냥 캠페인일 뿐”이라며 /spring-campaign을 새 페이지에 302로 연결했다고 합시다. 이 301 → 302 체인은 영구성을 반쯤만 주장합니다. 한 번만 정하세요: 영구라면 모든 홉을 301로, 임시라면 원본 URL에서 302 하나로.

리다이렉트 체인 단계별 확인 방법

무료 Redirect Chain Checker는 크롤러가 보는 그대로 체인을 따라갑니다. 각 홉은 새로운 HTTP GET입니다 — 캐시도, 쿠키도, JavaScript도, HSTS 업그레이드도 없이 — user agent는 GeoToolsBot/1.0으로 요청합니다.

1단계: 검사할 가치가 있는 URL 모으기

추측이 아니라 출처에서 모으세요: 현재와 과거의 사이트맵, 서버 접근 로그, 외부 링크가 달린 페이지를 볼 수 있는 Search Console의 링크 보고서 — Google의 사이트 이전 가이드가 권장하는 바로 그 출처들입니다 — 에 더해 상위 페이지의 http:// 버전과 non-www 변형, 백링크 내보내기 파일까지요.

2단계: 검사 실행하기

redirect chain checker에 URL을 붙여넣고 Check redirects를 누르세요. 도구는 리다이렉트를 비활성화한 상태로 URL을 요청하고, Location을 읽고, 해석한 뒤 다시 반복합니다 — 최대 여섯 홉까지, 매 단계에서 루프를 감지합니다. 모든 홉의 상태 배지, URL과 대상, 최종 랜딩 페이지와 콘텐츠 유형을 얻습니다. 저희가 테스트한 건강한 기준 사례 http://github.com: 301 한 번, 이어 200.

3단계: 문제 목록 읽기

검사기는 또한 해가 되는 것들을 표시해 줍니다. 홉이 세 개를 넘는 체인 — 체인을 “이상적으로는 3개 이하, 5개 미만”으로 유지하라는 Google의 조언과 같은 기준입니다; 첫 홉 이후에도 여전히 평문 http://에 머무는 홉 — HTTPS 업그레이드가 늦어진다는 뜻입니다; 영구 코드와 임시 코드의 혼용; 도메인을 넘어가는 홉 — 등록 도메인(등록하는 단위인 example.com을 말하며 shop.example.com이 아님)을 벗어나는 홉으로, Google은 이를 주소 변경(Change of Address) 도구가 포함된 자체 체크리스트가 있는 사이트 이전으로 취급합니다; PDF 같은 비 HTML 최종 페이지; 그리고 4xx/5xx로 끝나는 경우. 빙글빙글 도는 URL은 체인 대신 루프 오류를 반환합니다.

4단계: 엔지니어를 위한 스팟 체크 방법

curl -sI http://github.com          # first hop only
# HTTP/1.1 301 Moved Permanently
# Location: https://github.com/

curl -sIL http://www.apache.org     # headers for EVERY hop
# HTTP/1.1 301 Moved Permanently
# Location: https://www.apache.org/
# HTTP/2 200

curl -s -o /dev/null -w 'status=%{http_code} redirects=%{num_redirects} final=%{url_effective}n' -L http://github.com
# status=200 redirects=1 final=https://github.com/

실제 실행에서 얻은 주의 사항 두 가지: -I는 HEAD 요청을 보내는데, 일부 서버는 HEAD를 다르게 취급합니다 — 저희 실행에서 github.com은 멈춰 섰고 GET은 순조롭게 통과했습니다. 그리고 최종 응답이 403이라고 해서 항상 고장 난 것은 아닙니다. 집필 시점에 stackoverflow.com은 깔끔한 301 다음에 봇에게 403을 반환했습니다. “고장 난” 최종 페이지는 먼저 브라우저에서 다시 확인하세요.

체인을 홉 하나로 평탄화하는 방법

목표는 하나입니다: 리다이렉트되는 모든 URL이 최종 목적지를 직접 가리키게 하는 것. 중간자는 없애는 겁니다.

  1. 먼저 체인을 그리세요. 무엇이든 손대기 전에 정확한 홉과 상태 코드를 적어 두세요.
  2. 첫 홉을 다시 쓰세요. nginx에서는 80번 포트에서 수신하는 server 블록(또는 이전 호스트의 블록)에 return 301 https://www.example.com/new-page;를 넣습니다. Apache에서는 Redirect 301 /old-page https://www.example.com/new-page가 mod_alias를 필요로 하며 vhost나 .htaccess에 들어갑니다. 이 지시어는 경로 세그먼트 전체를 매칭하므로 /old-page는 /old-page/sub까지 잡습니다 — 정확히 일치시키려면: RedirectMatch 301 ^/old-page$ https://…/new-page. WordPress에서는 Redirection 플러그인이 데이터베이스에서 이 매핑을 관리합니다.
  3. 중간 홉을 제거하거나 방향을 바꾸세요. 규칙을 삭제하기 전에 실제로 그곳을 가리키는 것이 없는지 확인하세요: 백링크 내보내기 파일을 점검하고 접근 로그를 grep하세요. 외부 링크가 아직 중간 URL로 들어오나요? 그 URL도 방향을 바꾸세요.
  4. 내부 링크를 고치세요. 리다이렉트는 바꿀 수 없는 URL — 남의 백링크 — 를 위한 것입니다. 자기 사이트의 링크는 최종 URL을 가리키게 하세요. 내부 링크가 체인의 가장 큰 단일 원인인 경우가 많습니다.
  5. 다시 검사하고 사이트맵을 업데이트하세요. Redirect Chain Checker로 상태 코드가 올바른 한 홉인지 확인하세요. 그다음 사이트맵을 재생성해 최종 URL만 남기고 Search Console의 사이트맵 보고서에 제출하세요. 생성은 무료 XML Sitemap Generator가 처리합니다.

http와 www를 통합하고 있나요? 반쪽짜리 역할을 하는 규칙 두 개가 아니라 홉 하나로 끝내세요 — http://example.com이 https://www.…로 가기 전에 https://example.com을 강제로 거치게 되고, 순서가 틀린 force-TLS/force-www 규칙은 전형적인 루프의 원인입니다:

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://www.example.com$request_uri;
}

한 가지 함정이 더 있습니다. 일부 규칙은 쿼리 문자열을 조용히 버립니다. Apache mod_alias의 Redirect는 GET 파라미터를 그대로 넘기지만, 대상에 자체 ?가 들어 있는 RewriteRule은 [QSA]를 붙이지 않는 한 원래 쿼리 문자열을 버립니다([QSD]는 일부러 버리는 플래그입니다). /?utm_source=newsletter처럼 파라미터가 벗겨진 캠페인 URL은 애널리틱스를 망칩니다 — UTM builder로 링크를 만들고 파라미터가 살아남는지 확인하세요.

피해야 할 흔한 실수

  • 이전 쌓기. http→https, 그다음 www, 그다음 사이트 재구축 — 각각이 앞선 리다이렉트 위에 또 한 겹을 쌓습니다.
  • 영구 이동에 302 사용하기 — CMS 기본값이었기 때문에.
  • 브라우저를 테스트 도구로 믿기. 브라우저는 301을 적극적으로 캐시하고, HSTS는 첫 요청 전에 http를 https로 업그레이드합니다 — 브라우저에는 실제보다 적은 홉이 보일 수 있습니다.
  • 첫 홉만 고치기. 중간 홉은 여전히 오래된 백링크로부터 링크 에쿼티를 받고 있습니다.
  • “크롤 예산을 아끼려고” robots.txt에서 중간 URL 차단하기 — Googlebot은 리다이렉트를 아예 보지 못합니다.
  • 대응하는 페이지가 아니라 아무거나 있는 곳으로 리다이렉트하기 — 고쳐진 게 아니라 그냥 짧아진 것입니다.

자주 묻는 질문

리다이렉트 체인에 리다이렉트가 몇 개면 너무 많은가요?

Google의 사이트 이전 가이드에 따르면 Googlebot은 최대 10홉까지 따라가지만, 목적지로 곧장 연결하고 체인은 “이상적으로는 3개 이하, 5개 미만”으로 유지하라고 권합니다. 검사기도 같은 기준입니다 — 세 홉을 넘으면 표시하고, 여섯 홉에서 멈춥니다.

301 리다이렉트는 PageRank를 잃게 하나요?

아니요 — Google의 사이트 이전 문서는 “301 및 기타 영구 리다이렉트는 PageRank 손실을 일으키지 않는다”고 명시하고, Google의 Gary Illyes도 2016년 트윗에서 같은 말을 했습니다. 그래도 체인은 지연 시간, 크롤 예산, 물리기 쉬운 규칙, 통합을 늦추는 임시 코드의 비용을 물립니다.

리다이렉트 체인과 리다이렉트 루프의 차이는 무엇인가요?

체인은 결국 실제 페이지에 도달합니다: A → B → C → 200. 루프는 자기 자신으로 되돌아갑니다 — A → B → A — 그리고 영원히 끝나지 않으며, 브라우저는 ERR_TOO_MANY_REDIRECTS를 표시합니다. 해결법도 다릅니다: 루프는 홉 하나를 다시 가리키는 게 아니라 충돌하는 규칙을 찾아 끊어야 합니다.

브라우저와 검사기가 서로 다른 체인을 보여주는 이유는 뭔가요?

두 가지 메커니즘 때문입니다. 첫째, 브라우저는 리다이렉트를 캐시하는데 특히 301이 가장 강하게 캐시됩니다 — Chrome은 규칙이 바뀌고 한참 뒤에도 캐시된 리다이렉트를 계속 따라갑니다. 둘째, HSTS입니다: Strict-Transport-Security 헤더를 본 적이 있으면(또는 preload 리스트를 통해) 브라우저가 첫 요청 전에 http를 https로 업그레이드하면서 해당 홉을 감춥니다. 검사기는 HSTS 목록 없이 매 URL을 새로 요청합니다.

WordPress에서 리다이렉트 체인은 어떻게 고치나요?

대부분은 플러그인 리다이렉트, .htaccess/nginx 규칙, HTTPS/www 재작성이 겹겹이 쌓인 결과입니다. 모든 출처를 조사하세요 — Redirection 플러그인의 리다이렉트 목록과 로그 화면, 서버 설정, SEO 플러그인의 리다이렉트까지 — 그다음 각 항목을 다시 써서 원본 URL이 301 하나로 최종 목적지에 닿게 하세요. 내부 링크를 업데이트하고 검사기로 다시 확인하세요.

Google이 수정된 리다이렉트를 반영하는 데 얼마나 걸리나요?

재크롤링은 URL별로 Googlebot의 속도에 맞춰 진행됩니다 — 중소 사이트는 보통 몇 주, 대형 사이트는 더 오래 걸립니다. Search Console의 URL 검사(URL Inspection) 도구로 색인을 요청하고 업데이트된 사이트맵을 제출하면 빨라집니다. 재처리 과정에서 등락이 있는 것은 정상입니다.

오래된 301 규칙은 얼마나 오래 유지해야 하나요?

Google은 신호가 이전되고 외부 사이트들이 링크를 업데이트할 시간을 주기 위해 리다이렉트를 최소 1년 — 이상적으로는 더 오래 — 유지하라고 권합니다. 제거하기 전에 남은 백링크가 없는지(링크 내보내기 확인), 접근 로그에 실제 트래픽이 없는지 확인하세요.

리다이렉트 체인을 일괄 확인할 수 있나요?

무료 검사기는 한 번의 실행에 URL 하나를 처리합니다. 사이트 전체 점검을 하려면 Google의 이전 가이드가 추천하는 Screaming Frog 같은 데스크톱 크롤러로 크롤링한 뒤, 모든 3xx 응답을 내보내고, 규칙을 다시 쓰기 전에 가장 심한 URL들을 검사기에 넣어 확인하세요.