同一批新链接,有的几小时就被抓,有的埋了两周也等不到。除了 Sitemap、外链和主动推送,页面本身就是一个岔路口:蜘蛛解析完 HTML 后,会把遇到的链接放进待抓队列,而它先走哪一条,和链接出现的位置、顺序、上下文都有关系。
蜘蛛解析页面时的基本顺序
蜘蛛拿到的是一段 HTML 文本,它的读取大致是从上往下的:
- 先处理头部区域,包括 canonical、hreflang、meta robots 等,这些会先影响它对整个页面的判断;
- 再顺着 body 往下走,遇到 a 标签的 href 就抽出 URL;
- 链接所在的区块、前后的文字、锚文本本身,通常也会被一起记录。
需要留意的是,这里的顺序是 HTML 里的书写顺序,不是视觉上的位置。用 CSS 把某个区块挪到页面上方,对蜘蛛来说它依然排在后面;反过来,写在源码靠前的模块,即使视觉上不起眼,也更容易被先处理。
几种区块位置的抓取体感差异
从访问日志里长期观察,大致能看到这样的差别,可以作为参考:
- 主导航:出现频率最高,几乎每次抓取都会重新走一遍,是站内最稳定的入口。
- 正文内的链接:抓取意愿通常仅次于导航,尤其是有上下文、锚文本描述清楚的链接,更容易被当成有效路径。
- 相关推荐与列表翻页:中等水平,受页面自身被抓频率的限制,翻到后面几页的概率明显下降。
- 页脚、备案与版权链接:被完整走到的概率偏低,很多页面只走其中一部分。
这不是硬规则,但可以拿来判断“重要链接该放哪儿”。如果几个关键页面迟迟不被抓,先确认它们是不是只出现在页脚、折叠层或者需要点击才展开的区域里。
几种可控的引导手段
把关键入口放进导航或面包屑
导航和面包屑几乎出现在每个页面上,又位于源码靠前的位置,是让一批页面被反复走到的省力做法。新上线的栏目页、聚合页,优先考虑在这里给一个稳定入口,而不是只靠底部链接。
正文里给出带上下文的锚文本
“点击这里”“更多”这类锚文本,对蜘蛛判断目标页面主题帮助有限。换成能概括目标内容的短语,既方便读者,也让这条链接在被抽取时更有意义。同一页面内,指向同一目标的多条链接尽量合并或统一写法,减少重复。
列表页保持稳定的分页结构
分页链接使用固定的 URL 规则,并让上一页、下一页、页码这些链接在源码中位置稳定。频繁变动分页路径,会让已经建立的抓取路径需要重新走一遍。
少用纯 JS 点击跳转
依赖脚本在点击时才生成 URL 的写法,第一遍抓取往往拿不到目标地址。如果必须这样做,至少在页面上保留一份可被直接读取的普通链接,让不执行脚本的抓取也能看到出口。
链接数量与顺序的取舍
一页塞进几百条链接,蜘蛛不一定每条都走。队列里排不进去的链接,等于没写。比较稳妥的做法是:把最重要的十几二十条放在靠前、有上下文的区域,其余的分流到列表页或专题页,由更专门的页面去承载长尾。
链接多不等于机会多,抓取队列里排不进去的那部分,实际效果接近不存在。
怎么观察它是否按你预期在走
判断引导是否有效,最直接的方式还是看日志,重点关注几件事:
- 新页面从上线到第一次被抓,间隔了多久;
- 同一页面是被导航带进来的,还是由列表页、正文链接带进来的;
- 哪些链接长期没有出现在日志里,它们在源码中的位置是否有共性;
- 调整内链位置之后的一两周,抓取分布有没有变化。
把这几项做成一个简单的记录表,比凭感觉判断更可靠。一次只改一个变量,观察一个窗口期,才分得清是哪一处改动起了作用。
整体上,页面内的链接顺序和位置不决定抓取结果,但它决定了蜘蛛走到某个目标的难易程度。源码顺序顺一点、锚文本清楚一点、链接数量收一点,长期积累下来,重要页面的发现速度会更稳定一些。