百度收录问题:内容相同但响应头不同,先改哪一层

📍 WDQWDWQD987AAAAA:136.243.57.164
📱 Mozilla/5.0 (compatible; QlyzeBot/1.0; +https://app.qlyze.io/bot)
🔗 /550fe051b554.html
📄

百度收录问题:内容相同但响应头不同,先改哪一层

如果两个页面正文一模一样,只是响应头不同,百度仍可能把它们当成不同版本处理。此时真正要判断的不是“内容是否重复”,而是响应头有没有改变百度对页面身份、可访问性和更新状态的判断。最有效的动作是:先固定一个希望被收录的URL,再用抓取工具或服务器日志核对它的状态码、Content-Type、Content-Location、Vary、缓存与重定向链,最后才决定是改内容还是改头。

先分清响应头影响的是身份、可抓取还是缓存

同一段正文放在两个URL上,响应头差异通常落在三类判断里。第一类是页面身份:301、302、307、308会改变百度最终抓取和归并的目标,如果A页面跳B页面,而B又跳回A,百度可能反复切换代表URL。第二类是可抓取性:403、404、410、429、503与200的差别,不只是“能不能打开”,还会影响百度是否继续把该URL当作有效入口。第三类是内容表示:Content-Type、Content-Encoding、Vary、Cache-Control、ETag不同,可能让百度拿到压缩失败、乱码或缓存旧版本。你要先判断手里的页面属于哪一类,再决定处理顺序。

用一条可执行路径把资料页变成处理方案

假设你手里有一组相同正文的页面:/item?id=123返回200,/item/123返回301到前者,但前者又带Vary: User-Agent,同时CDN对百度蜘蛛返回了不同缓存版本。不要先改正文。按下面顺序做:

  1. 用curl -I或浏览器开发者工具分别请求两个URL,记录状态码、Location、Content-Type、Content-Encoding、Vary、Cache-Control、ETag。
  2. 把百度蜘蛛的User-Agent作为请求头再请求一次,观察返回的正文长度、编码和状态码是否与普通用户一致。
  3. 在服务器日志中筛选该URL最近一段时间的抓取记录,看百度拿到的是301、200还是5xx,以及响应体大小是否稳定。
  4. 如果发现同一URL在不同请求头下返回不同正文或不同状态码,先统一这一层,再谈收录。

这个动作的结果会直接决定下一步:如果百度蜘蛛拿到的是301,就应检查跳转目标是否稳定;如果拿到200但正文为空或乱码,就应检查Content-Encoding与压缩配置;如果拿到200且正文一致,只是缓存头不同,则优先处理缓存键与Vary,而不是删除重复页面。

哪些响应头差异最容易被忽略

Content-Location常被当成普通元数据,但它可能暗示同一资源的另一个地址。若A页面返回Content-Location: /b,而B页面又返回Content-Location: /a,百度可能难以确定哪个是代表URL。Vary同样关键:如果服务器根据User-Agent返回不同HTML,百度蜘蛛看到的版本可能和用户不同,收录后的摘要也会偏离预期。Cache-Control与ETag则影响百度是否会继续使用旧缓存;当正文已更新但响应头仍允许长时间缓存时,抓取到的可能仍是旧内容。注意,这些差异不必然导致不收录,但会让你对“内容相同”的判断失真。

修正后怎样验证,避免把抓取异常当成收录结论

修正响应头后,不要只看百度是否立刻放出新结果。更可靠的验证是:再次用百度蜘蛛UA请求同一URL,确认状态码、Content-Type、正文长度与普通请求一致;再查看服务器日志中该URL的返回码是否稳定为200。若日志中抓取量下降或某天归零,也不能单独证明处理正确,可能是抓取预算调整、站点整体改版、robots.txt变更或百度自身调度波动。此时应把日志与百度搜索资源平台中的抓取诊断、站点地图状态交叉核对,而不是仅凭一次请求下结论。

如果页面仍未被收录,再检查是否存在robots.txt限制、站点地图未更新、HTTPS证书链异常或页面需要登录。robots.txt的抓取限制不等于可靠的索引移除;站点地图不保证收录;HTTPS也不保证安全无漏洞或排名。把响应头这一层处理干净后,再决定是否调整内容或内链,才不会在错误层面反复修改。

图1 图2

nginx