搜尋抓取

蜘蛛進得去也要出得来:给抓取路径留一條回程

蜘蛛能顺利進站,不代表它能繼續往里走。很多抓取路径在正文頁就断了:没有實体連結、没有面包屑、相關推荐全靠脚本渲染。本文從單向死路的成因、面包屑的寫法、正文頁横向出口和内鏈閉合四個角度,讲怎么给蜘蛛留一條回程,並附一份可以直接照做的检查清單。

搜尋抓取

蜘蛛進得去也要出得来:给抓取路径留一條回程

不少站点在抓取入口上花了不少功夫:首頁、栏目頁、Sitemap 都安排得清楚,蜘蛛也确實進来了。但抓取路径的問题往往出在“出去”這一环——正文頁除了一個返回按钮,没有別的實体連結可以繼續走。蜘蛛爬到這一层,路就断了,剩下那些頁面只能等下一次從首頁重新出發。

單向死路是怎么形成的

常见的有三種:一是整站靠脚本渲染導航,蜘蛛拿到的 HTML 里看不到連結;二是返回、更多、相關文章這類位置用了 span 或图片加点击事件,用戶点得動,蜘蛛走不動;三是内鏈全都指向首頁和少數几個热门頁,冷门頁在里面没有位置,自己也没有出去的連結。结果就是抓取路径變成一條條射线,從入口射出去,到正文頁結束。

面包屑:一條成本最低的回程

面包屑是正文頁最容易被忽略的出口。它一般按“首頁 > 栏目 > 子栏目 > 目前頁”排列,每一級都是可点击連結。對蜘蛛来说,這不只是導航,而是一條能向上回到栏目的稳定路径,顺带把目前頁與栏目之間的從属關系讲清楚。

  • 用可点击的連結元素,不要用 span 加点击事件代替;
  • 层級尽量與真實目錄一致,不要為了排版好看拼一條實际不存在的路径;
  • 放在正文上方、DOM 中靠前的位置,別塞在頁脚最底部;
  • 目前頁那一級不加連結即可,避免自指循环。

正文頁還能往哪儿走

除了向上回栏目,正文頁還可以留几個横向出口:同栏目下的上一篇 / 下一篇、按标簽聚合的相關文章、同一话题的延伸阅讀。這些位置的價值在于,它們能把蜘蛛带到那些不在首頁露出、也不在列表頁前几屏的頁面。

要注意的是數量。一個正文頁放三到八條站内連結通常够用,几十條堆在文末,反而會让真正重要的目标被稀释。另外,尽量让連結指向内容相關的頁面,而不是随机推荐一堆無關文章——蜘蛛不判断相關性,但相關性决定了這條路径值不值得繼續走。

让路径閉合,而不是绕圈

還有一類問题正好相反:路径太多,彼此打轉。比如 A 頁推荐 B,B 頁推荐 A,C 頁又同时推荐 A 和 B,几轮下来蜘蛛一直在几個頁面之間循环,没走到更深的地方。判断方法不难:從栏目頁出發,看能不能顺着連結走進站内最深的正文頁,再看這些頁面之間有没有形成小閉环把路堵死。

内鏈的目标不是让每個頁面被鏈很多次,而是让每個重要頁面都能被走到,並且走進去之後還有路可走。

一份可以照着做的检查清單

  1. 随机挑十個正文頁,查看源代碼,數一數有多少條指向站内其他頁面的可点击連結;
  2. 检查這些連結是否依赖脚本才能生成,關掉脚本後還能不能看到;
  3. 沿着某個正文頁的面包屑往上点,看能否顺利回到栏目頁和首頁;
  4. 從栏目頁出發,尝试只靠内鏈走到最深的正文頁,记錄中間断在哪一步;
  5. 在服務器日誌里观察被频繁抓取的是不是總是那几個頁面,如果是,說明出口太窄。

抓取路径不需要设計得多复杂。入口清楚、层級清楚、每條鏈路都有回程,蜘蛛就有理由繼續往下走,站点里的頁面也才有机會被一個個發現。