收录停滞的时候,很多人的第一反应是去提交站点地图,或者反复检查页面内容。但蜘蛛要访问一个 URL,前提是它先知道这个 URL 存在。对大多数站点来说,这条路径主要靠站内链接完成,站点地图只是补充。把入口问题当成收录问题去解决,方向容易偏。
蜘蛛发现 URL 的几个入口
常见的入口有四类:站内链接、站点地图、外部链接,以及历史上已经被抓取过的 URL。其中站内链接是唯一完全由自己控制、且可以持续维护的一条。外链不可控,站点地图覆盖面有限,历史记录只对老页面有效。新页面能否在较短时间被发现,基本取决于站内有没有指向它的链接。
导航与列表页:覆盖面最广的入口
全局导航和分类列表页决定了大部分页面能不能在少数几次点击内被访问到。层级过深的页面,抓取频次通常明显偏低,不是因为被惩罚,而是蜘蛛很少一路点到那么深。列表页的分页如果只靠 JavaScript 动态加载,后面的条目可能长期不被发现,因为源码里根本没有可跟随的地址。
正文内链:提供深度与上下文
正文里指向其他页面的链接,往往比导航链接更能说明页面之间的关联。锚文本能给蜘蛛一点上下文线索,但不必把锚文本写成和页面标题完全一致,自然表达即可。真正有价值的是链接的位置和数量:一段正文里自然出现的两三个相关链接,比页脚堆几十个链接更有效。
站点地图:补充而不是替代
站点地图适合放新上线的页面、孤立页面、以及被交互隐藏起来的页面。但如果一个 URL 在整个站内没有任何可点击入口,长期只靠站点地图反复出现,被访问的频率通常不会高。把站点地图当作万能提交入口,容易出现“文件里都有、日志里一个都没有”的情况。
链接写法里容易出问题的地方
- 用跳转链接指向站内页面,例如通过中间参数页再跳转,蜘蛛跟到的是跳转地址而不是目标页;
- 相对路径层级写错,解析出来的地址与 canonical 不一致,等于人为造出两个版本;
- 给站内链接加了 nofollow,相当于告诉蜘蛛不必顺着走;
- 链接由 JavaScript 点击事件生成,a 标签没有可用的 href 属性;
- 大量链接集中在页脚或侧栏,重复度高,实际意义有限;
- 链接指向已经 301 或 404 的地址,浪费抓取额度,也增加发现路径的噪声。
一套可以照着走的核对顺序
- 确认目标 URL 至少有一个可点击的 a 标签入口,且 href 是完整规范地址;
- 检查从首页到该地址的点击层级,一般控制在三到四次以内;
- 在抓取日志中搜索该 URL,看蜘蛛是否访问过、返回什么状态码;
- 检查入口页面本身是否被抓取,入口没被抓,下游自然也不会被发现;
- 对比站点地图中的地址与站内实际链接地址是否完全一致;
- 如果入口和日志都正常,再把注意力转到页面自身的内容质量上。
先看入口,再看页面
收录是抓取和判断之后的结果,不是一个可以直接执行的动作。入口缺失时,页面内容做得再完整也不会被访问到,此时优化正文、调整关键词都解决不了问题。反过来,入口齐全但页面长期不被索引,才需要考虑内容重复、信息量不足这类页面层面的原因。把这两类问题分开,排查效率会高很多。
先确认蜘蛛能不能走到这个页面,再讨论这个页面值不值得进索引。
实际操作上,把内链当成日常维护的一部分会省事很多:新增页面时顺手从相关旧页面加一个自然链接,比事后批量补链接更稳定,也更接近真实的浏览路径。