技术 SEO

HTTP Link Header SEO 检测器

输入一个 URL。我们会在服务器端抓取该页面,并按照 RFC 8288 解析其 HTTP Link 响应头中的 rel="canonical"、rel="alternate" hreflang 以及 rel="next"/"prev" 条目——然后与同一页面上的 HTML <link> 标签逐一核对,标出任何冲突。

受 reCAPTCHA 保护。我们在服务器端抓取该 URL(已做 SSRF 防护)并读取其响应头——不会存储任何内容。

为什么 Link header 很重要

几乎所有 canonical 与 hreflang 检测工具都只查看页面 <head> 中的 HTML <link> 标签。RFC 8288 定义了第二个同样有效的声明位置:HTTP Link: 响应头。Google 明确记录并支持这一机制,WordPress 及多家 CDN 会自动发送它,而且它是为非 HTML 资源(PDF、图片、JSON API 响应)设置 canonical 或 hreflang 的唯一方式——因为这些资源根本没有 <head> 可以放置 <link> 标签。由于没有任何界面会渲染它,CDN 边缘规则悄悄设置了与 HTML 标签不一致的 header,或者一份从未被想到要用这种方式设置 canonical 的 PDF,在浏览器和任何只读取 HTML 的工具中都是完全隐形的。

本工具检测什么

一个真正的 RFC 8288 解析器——而非正则猜测——读取您服务器实际发送的响应头。

RFC 8288 Link header 解析

解析原始 Link: 头的值——包括多个以逗号分隔的条目、带引号的参数以及多值 rel 列表——并将其转换为结构化的 rel=canonicalrel=alternaterel=next/prev 条目,同时标记任何无法解析为合法 link-value 的片段。

Header 与 HTML canonical 冲突检测

将 header 中 rel="canonical" 的目标与页面 HTML 中 <link rel="canonical"> 标签进行比较。二者不一致是一个真实且不易察觉的问题:搜索引擎可能选择遵循任意一个信号,导致 canonicalization 变得不确定。同时还会标记出多个 header canonical、跨域目标,以及是否自我引用了被抓取的 URL。

通过 header 设置 hreflang

校验每一条 rel="alternate"; hreflang="..." header 条目的语言代码,检查在有 2 条及以上条目时是否缺少 x-default、是否缺少自我引用条目,以及是否存在指向不同 URL 的重复代码——然后将整组条目与页面 HTML 中的 hreflang 标签核对,找出冲突。

非 HTML 资源覆盖检测

对于 PDF、图片或 API 响应(没有 HTML,因此根本不可能有 <link> 标签),会标记出未发送 header canonical 的情况——这意味着该资源对搜索引擎来说完全没有 canonicalization 信号,这一点极易被完全忽略。

常见问题

什么是 HTTP Link header?我的网站为什么会发送它?

这是 RFC 8288 定义的一种响应头,承载着通常以 HTML <link> 标签书写的相同 rel 关系(canonical、alternate、next、prev 等等)——区别在于它对任何响应都适用,无论是不是 HTML。WordPress 核心会自动发送一些 Link header;许多 CDN 与反向代理也可能在边缘节点注入或改写它们,有时源站本身并不知情。

Header 中的 canonical 与我的 HTML canonical 标签不一致——这是个 bug 吗?

几乎可以肯定是的。Google 官方文档指出两者都是有效信号,但并不保证二者冲突时以哪一个为准——实际上这会让该 URL 的 canonicalization 变得不可预测。请检查是否有 CDN、缓存层或插件在独立于您的 HTML 模板注入该 header,并让两者保持一致。

我可以不使用任何 HTML &lt;link&gt; 标签就设置 hreflang 吗?

可以——header 形式与标签形式完全等效,也是为非 HTML 资源(例如 PDF)设置 hreflang,或在不改动 HTML 模板的情况下为响应添加 hreflang 的标准方式。规则相同:每个语言版本都应在列表中包含自身(自我引用),一旦有两个以上版本,建议加入 x-default。

Google 真的会使用 Link 响应头吗?

会。Google Search Central 文档明确将 HTTP header 列为指定 rel="canonical" 与 rel="alternate" hreflang 的受支持方式之一,并特别指出非 HTML 文件正是这一机制存在的原因。

我的 URL 或其内容会被存储在任何地方吗?

不会。抓取仅在服务器端为本次检测执行,结果直接返回给您的浏览器;除了一个限流计数器之外,不会写入任何数据库或日志。