同一个 URL,你用浏览器打开是完整的商品页,搜索引擎抓到的却可能是一份占了半屏“请先登录”的残缺 HTML。这种“抓到的和看到的不是一回事”的情况,在排查收录问题时经常被忽略——它会让后面所有关于收录状态的判断都建立在错误前提上。
第一步:先取证,别凭印象判断
先别急着改页面。用几种不同的请求方式,各取一次同一 URL 的原始 HTML(不是渲染后的截图),把正文部分截出来对比:
- 普通浏览器 UA 请求一次;
- 移动端 UA 请求一次;
- 搜索引擎 UA 请求一次;
- 带 Cookie 与不带 Cookie 各请求一次。
如果这几份结果正文长度差距明显,差异就是真实存在的,接下来才轮到找原因。如果几份结果完全一致,那收录问题应该往别处查,比如页面质量、内链深度或索引状态本身。
差异通常来自四个地方
1. UA 与设备判定
自适应站点常用 UA 判断跳转:移动 UA 被跳到 m 子域,桌面 UA 留在主域。如果跳转靠 JS 或 302 完成,而目标页又没有独立可抓取的正文,搜索引擎拿到的可能就是跳转前的空壳。要确认的是:主域和 m 域是否各自返回完整正文,以及是否存在桌面与移动互跳的死循环。
2. 地域与 CDN 回源
带地域分发的站点,不同节点可能返回不同货币、不同库存,甚至对某些地区直接返回屏蔽页。搜索引擎的抓取节点未必和你所在地一致,于是“本地正常、抓取异常”就出现了。核对方法是换出口 IP,或者直接对源站请求一次,看源站输出是否完整。
3. 登录态与会员墙
价格、联系方式、下载地址藏在登录后,是很多站点的默认设计。如果这些内容恰恰是页面主体,那么对外部抓取者来说这页就是低价值甚至空页面。要么把核心内容放到登录前,要么明确这类页面不必强求收录。
4. 缓存与渲染时机
页面缓存可能还停留在旧版本;前端渲染的站点则可能缓存了“还没注入正文”的那一刻。核对时注意请求头里的缓存标识,并对比直接访问源站与经过 CDN 的结果是否一致。
推荐的核对顺序
- 用不同 UA、不同 Cookie 状态各取一次原始 HTML,记录正文长度;
- 绕过 CDN 直连源站取一次,判断差异是否由缓存或节点造成;
- 检查是否存在 JS 或 302 跳转,跳转后的目标页能否独立返回正文;
- 确认关键内容是否依赖登录态;
- 以上都排除后,再去核对 robots、canonical、索引状态这些常规项。
两个容易踩的坑
不要为了“让蜘蛛看到更好的版本”而按 UA 给搜索引擎单独输出一份内容。这类做法属于伪装(cloaking),短期或许看不出问题,长期是站点级风险。
- 只对比渲染后的页面截图,不对比原始 HTML,会漏掉“正文靠 JS 注入”这一类问题;
- 发现差异后同时改了缓存、跳转和模板,结果无法判断是哪一项起了作用,建议一次只改一处。
把结论记下来
建议做一张简单对照表:URL、请求方式、返回状态码、正文长度、是否有跳转。同一批页面跑一遍,规律很快就会显现。抓取与收录本来就是两步——先保证抓到的版本是完整的,再去谈它有没有进入索引、以什么形式展示,顺序颠倒了只会白忙一场。