诊断工具

重定向链检测器

输入一个 URL,看清它的完整旅程:途中经过的每一次重定向、每台服务器返回的状态码、发出的 Location 响应头,以及最终落地的那个页面。

追踪通过我们的服务器进行,它会请求链条中的每一个 URL,并且只读取响应头,从不读取页面本身。不存储任何内容。

各个重定向状态码分别代表什么

重定向就是一个带有 3xx 状态码和 Location 响应头的响应,该响应头指向下一个 URL。浏览器或爬虫随后会向那个地址发起第二次请求,并一直这样走下去,直到收到一个不是重定向的响应。每一步都是一次完整的往返,所以一条包含四次重定向的链条意味着页面出现在屏幕上之前已经发生了五次请求。

301 Moved Permanently 和 308 Permanent Redirect 都表示资源已经永久搬到了新地址。302 Found 和 307 Temporary Redirect 则表示这次搬迁是临时的,原地址预计还会回来。这个区别对搜索引擎很重要:永久重定向要求它用新 URL 取代旧 URL,而临时重定向则告诉它继续保留原来的 URL。对浏览器同样重要:301 响应可以被缓存并重复使用,无需再次询问服务器,而 302 除非响应中明确说明,否则不可缓存。

较新的这一对之所以存在,是因为客户端过去处理表单提交的方式。301 或 302 常常在下一跳被改成 GET,请求体也随之丢失。307 和 308 禁止这样做:请求方法和请求体必须原样重复。303 See Other 给出的是相反的指示,它总是以 GET 发出下一次请求,这正是 POST 之后你想要的效果,这样重新加载结果页就不会把表单再提交一次。

重定向状态码一览

每个 3xx 响应都带有 Location 响应头。状态码告诉客户端这次搬迁有多永久,以及请求方法能否在其中保留下来。

301 Moved Permanently永久。新 URL 取代旧 URL。默认可缓存,浏览器可能不再向服务器确认。客户端可能把下一次请求改成 GET。
302 Found临时。真正算数的仍是原来的 URL。除非响应明确说明,否则不缓存。客户端可能把下一次请求改成 GET。
303 See Other无论之前用的是什么方法,都用 GET 去请求下一个 URL。这是表单 POST 之后的常规做法,可避免重新加载时重复提交。
307 Temporary Redirect临时,与 302 一样,只是请求方法和请求体必须原样重复。
308 Permanent Redirect永久,与 301 一样,只是请求方法和请求体必须原样重复。

检测器会告诉你什么

  • 按顺序列出每一跳,包含状态码、状态名称和实际请求的 URL
  • 每次重定向返回的 Location 响应头,并解析为绝对 URL
  • 每一跳耗时多久,以及整条链条总共耗时多久
  • 最终 URL 及其状态码,也就是搜索引擎记录下来的那个地址
  • 针对以下情况的警告:超过一跳的链条、循环、看起来是永久搬迁却用了临时状态码、明文 http 的跳转、主机变更,以及以错误结尾的链条

robots.txt 测试器

一眼看清 robots.txt 到底放行了哪些爬虫。针对 Googlebot、Bingbot、GPTBot 等测试任意 URL,并给出做出判定的那条规则。

测试你的 robots.txt →

博客精选

全部指南 →

Frequently asked questions

多少次重定向算太多?
一次很正常,两次值得看一眼。再多通常是无意造成的,而且每一跳都会在页面开始加载前增加一次往返。浏览器大约在二十次之后就会放弃。解决办法几乎总是同一个:更新原始链接,让它直接指向最终 URL。
该用 301 还是 302?
旧 URL 彻底不再使用时用 301:页面改名、栏目合并、更换域名。真正临时的情况才用 302,比如维护页面或季节性活动页。永久重定向是在要求搜索引擎在索引中用新 URL 替换旧 URL。
重定向会伤害 SEO 吗?
它本身并不会。它的代价是时间。每一跳都是页面渲染前的又一次请求,也是爬虫遍历站点时的又一次抓取。被索引的是链条末端的那个 URL,所以真正的风险是链条结束在你并不想要的地方。
重定向循环是怎么产生的?
两个或更多 URL 互相指向对方,链条永远到不了真正的页面,浏览器最终报错放弃。它通常源自两条规则打架:写在不同地方的 www 规则和 https 规则,或者与服务器配置相互冲突的 CMS 重写规则。
我从没设置过重定向,为什么我的 URL 会跳转?
大多数网站都带着没人手写过的规则:强制 https、添加或去掉 www、补上结尾斜杠,或者把未登录的访客送到登录页。在这里追踪这个 URL,逐跳查看 Location 响应头,就能看出是哪条规则、在哪一步生效了。