如果两个二级域名的页面正文完全相同,但响应头不同,最值得关注的不是“内容是否重复”本身,而是规范目标、缓存策略、内容类型和抓取权限这四类信号是否一致。缺少日志或后台权限时,仍可以用单次请求的响应头、页面内的 canonical 和站点地图做最小核对,但只能得出“信号是否冲突”,不能直接推出收录、排名或流量后果。
响应头很多,但真正会影响页面身份判断的通常是少数几个。可以按下面的顺序看:
Content-Type:如果一边是 text/html,另一边是 application/json 或 text/plain,即使正文看起来一样,也不能当作同一类页面处理。Link:其中的 rel="canonical" 如果与页面内的 canonical 指向不同,说明规范信号已经冲突。Location:带 3xx 状态时,它决定浏览器和抓取端最终落到哪个地址。页面正文相同但一个返回 200、一个返回 301,判断路径完全不同。X-Robots-Tag:它可能包含 noindex 或 nofollow。与页面内 meta robots 不一致时,需要先确认哪一侧是你真正想保留的信号。Cache-Control、ETag、Vary:它们主要影响缓存和内容协商,通常不直接决定页面身份,但能解释“为什么同一地址取到不同正文”。换句话说,正文相同不代表响应头可以忽略;但也不是每个响应头差异都值得升级为事故。判断标准是:这个头是否参与“这个地址代表什么内容、能不能被抓取、最终展示哪一版”的决策。
面对两个二级域名正文相同、响应头不同,处理方式可以收敛为三条路,但不必全部走一遍。
适用前提是:两个地址本来就承担不同用途,例如一个面向用户、一个面向接口或内部调用,且至少一侧已经用 X-Robots-Tag 或页面内 robots 明确表达不希望被当作普通内容页处理。此时需要确认的是信号是否自洽,而不是急着合并。
适用前提是:你希望其中一个地址作为唯一规范版本,但当前 200 状态、canonical 和 Content-Type 互相矛盾。可执行的最小动作是:先固定一个规范目标,再让响应头与页面内 canonical 指向同一地址,并保持 Content-Type 为 text/html。改完后重新请求一次,看 Link 与页面 canonical 是否一致。如果一致,下一步才是观察抓取与展示变化;如果不一致,先修冲突,不要继续加站点地图或内链。
适用前提是:其中一侧已经没有独立价值,且你能控制服务器配置。此时用 301 指向保留版本,比仅靠 robots.txt 更接近“退出”的目标。需要说明的是,robots.txt 的抓取限制不等于可靠的索引移除;如果页面已被外部引用,单靠抓取限制并不能保证它从结果中消失。
没有日志、没有后台、没有历史抓取数据时,仍然可以做一次可复现的核对:
Content-Type、Link、X-Robots-Tag 和 Location。这个动作的结果会直接影响下一步:如果冲突集中在 canonical,优先统一规范目标;如果冲突集中在 X-Robots-Tag,优先确认是否误加了 noindex;如果状态码本身不同,先解决跳转链,再谈内容重复。
但必须克制结论。请求量下降、抓取量归零或某个页面不再出现,都不能单独证明你的响应头处理正确——缓存、外部链接变化、站点结构调整、抓取预算波动都可能是合理解释。站点地图不保证收录,HTTPS 也不保证安全无漏洞或排名。这些信号只能说明“你表达了什么”,不能说明“对方一定如何采纳”。
假设 a.example.com 与 b.example.com 返回相同正文,但 A 返回 200 且页面 canonical 指向自身,B 返回 200、X-Robots-Tag: noindex,页面 canonical 却指向 A。此时可区分的原因至少有两种:一是 B 被有意设为不参与索引,二是配置遗漏导致 B 误带 noindex。判断方法不是看流量,而是看 B 是否还被内链、站点地图或外部链接引用:如果仍被大量引用,noindex 与引用意图冲突;如果已无引用,保留 noindex 可能成立。这个例子的数字和域名均为假设,只用于说明比较方法,不代表任何真实站点结果。
两个二级域名正文相同、响应头不同时,真正要判断的是规范、抓取和内容类型三类信号是否自洽。保留、改写或退出都可以成立,前提是你清楚哪一侧代表目标版本、哪一侧只是过渡或内部用途。缺少完整数据时,先做一次响应头与页面内信号的最小核对;核对结果决定下一步是修 canonical、修 robots 信号,还是先处理跳转。不要用单一指标归零来证明处理正确,也不要跳过信号冲突直接观察排名。