在搜狗收录查询中,两个 URL 返回的可见正文完全一致,却可能因为响应头不同而出现一边被收录、另一边长期不出现,或者曾经收录的一侧后来消失。响应头不是内容本身,但它会改变搜狗对页面身份、抓取状态和可索引性的判断,因此不能只用“内容相同”来解释结果。
第一种解释是重复内容判断。两个 URL 正文相同,但其中一个响应头带有规范指向信号,例如 Link: <https://example.com/a>; rel="canonical",搜狗可能把另一个 URL 视为副本,从而只保留规范版本。此时“内容相同”恰恰是触发合并的前提,而不是反证。
第二种解释是抓取状态判断。响应头里的状态码、内容类型、缓存指令或重定向方向,会让抓取程序把页面归入不同处理路径。例如一个 URL 返回 200 且 Content-Type: text/html,另一个返回 200 但内容类型写成 text/plain,后者可能被当作非 HTML 资源处理,即使正文肉眼看起来一样。
这两种解释都成立,但影响范围不同。重复内容判断通常只影响被合并的那一个 URL;抓取状态判断可能影响整批同响应头配置的页面。先判断属于哪一类,才能决定是改页面关系还是改服务器配置。
不要只看搜狗收录查询的结果数量。更可靠的做法是分别记录每个 URL 的响应头、正文摘要和当前收录状态,再比较差异。以下证据组合能帮助区分:
200、text/html,且没有规范指向差异,但只有一个被收录,重复内容判断更值得怀疑,应继续检查页面内的规范标签、站点地图提交和内部链接。301 或 302,另一个返回 200,抓取状态判断优先。此时正文相同没有意义,因为抓取程序看到的是跳转关系,而不是两个独立页面。X-Robots-Tag: noindex,而页面 HTML 里没有对应的 meta 标签,仍然可能阻止索引。这个信号只在响应头里出现,用普通页面检查工具容易漏掉。Content-Type 不同,一个为 text/html,一个为 application/octet-stream,后者可能被当作下载资源,收录查询结果自然不同。把上述证据按 URL 逐条列出后,通常会出现一个明确的分叉:差异集中在页面关系上,还是集中在服务器响应上。这个分叉决定下一步动作。
假设同一套内容分别通过 /product?id=10 和 /product/10 提供,正文完全一致。前者响应头返回 200 且带 Cache-Control: no-store,后者返回 200 且带 Link 规范指向自身。搜狗收录查询显示后者被收录,前者没有。
此时不能直接断定“动态 URL 不被收录”。更合理的解释是:规范指向让搜狗把前者视为副本,而 no-store 又可能降低重复抓取意愿。要验证,可以先移除前者的规范指向差异,保留相同的内容类型和状态码,再观察收录状态是否变化。如果变化,说明页面关系判断占了主导;如果不变,再回头检查抓取状态和内部链接。
一个可执行的动作是:为每个待查 URL 建立一行记录,包含状态码、Content-Type、X-Robots-Tag、Link 规范头、正文摘要和当前搜狗收录状态。这个动作的结果会直接决定下一步方向。
X-Robots-Tag 或状态码,下一步是修正服务器配置,而不是改正文。Link 规范头,下一步是确认规范版本是否与站点地图、内部链接和页面内规范标签一致。需要提醒的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图提交也不保证收录。响应头只是判断链中的一环,不能单独承担全部结论。把响应头差异与页面关系、抓取记录和链接信号放在一起核对,才能避免把“内容相同”误当成“处理应当相同”。