很多人在做蜘蛛池投放时,注意力几乎都在外部:URL投到哪些渠道、一次投多少、投放频率怎么控制。但搜尋蜘蛛真正進入一個站点时,最先接触的往往是站点自己的robots.txt。這個文件如果寫得有問题,後面的投放動作可能一直在做無用功,而且很难從投放端看出原因。
robots.txt在URL發現鏈路里的位置
蜘蛛池解决的是让搜尋蜘蛛知道有這么一個URL,robots.txt决定的是這個URL能不能被抓取。两者是先後關系:蜘蛛通過外鏈、站点地图或投放渠道發現地址後,抓取前會參考robots.txt的規則。規則不允许,蜘蛛通常會跳過這條URL,發現動作也就停在了發現這一步。
還要分清楚一点:robots.txt是抓取层面的约定,不是内容层面的控制。它管的是蜘蛛要不要来抓,不管頁面抓回去之後會怎么處理。把這两件事混在一起,就容易做出互相抵消的配置。
容易被忽略的三類規則寫法
全站拦截
Disallow: / 這類寫法在測試环境很常见,正式上线时忘记删掉,就等于告诉所有搜尋蜘蛛不要抓取任何頁面。此时無论投放多少URL,蜘蛛拿到的都是一個它不會訪問的地址。這種情况並不少见,尤其是在站点迁移或改版之後。
目錄級與參數級拦截
比如對搜尋頁、分頁參數、會话參數做拦截,這類規則本身有它的道理,但常常是歷史遗留,寫完之後没人再回头核對。投放之前確認一下目标URL是否落在這類規則里,是成本很低、收益却很明顯的一步。
規則之間的冲突
多個User-agent段落之間的優先級關系、通配符的位置、结尾是否加斜杠,這些细节凑在一起时,規則會變得连自己也讀不明白。規則越复杂,誤伤本该被發現的URL的概率就越高。
几個常见的誤区
- 把robots.txt当成隐藏手段。拦截抓取不等于頁面不被索引,来自外部的連結锚文本仍可能让地址出現在结果里,只是缺少摘要信息。
- 既拦截抓取又指望noindex生效。被拦住的頁面,蜘蛛讀不到頁面里的noindex,這两個動作放在一起,经常是互相抵消的。
- 只检查首頁。robots.txt是按路径生效的,首頁放行不代表栏目頁、詳情頁放行。
- 投放之後才回头看規則。URL一旦被投出去,再改配置,之前那批抓取机會基本已经消耗掉了。
投放前可以逐條走一遍的检查清單
- 直接訪問域名下的 /robots.txt,確認返回200,而不是404、500或者跳轉。
- 用目标URL的關键路径去比對規則,確認没有被Disallow命中。
- 確認目标URL本身返回200,没有中途跳轉到其他地址。
- 確認頁面没有設定noindex,或者這個設定是你有意保留的。
- 如果站点有站点地图,確認它已经在robots.txt里被声明,並且路径可訪問。
- 如果站点用了CDN或防火墙,確認它們没有把搜尋蜘蛛拦在外面。
让規則和投放目标保持一致
站点结构和内容策略會變,robots.txt却常常几年不動。比較稳妥的做法是把它当成一個需要定期核對的配置項:栏目調整、模板上线、測試环境轉正式环境之後,都顺手看一遍。投放前做一次小范围確認,比事後逐個排查原因要省力得多。
投出去的是地址,能不能抓、抓到了怎么處理,仍然由站点自己决定。規則和投放目标對不上时,再大的投放量也很难轉化成有效的抓取。
蜘蛛池只是URL發現环节里的一種工具,它不會绕過站点的抓取規則,也不會替你解决配置层面的問题。把robots.txt這類基础項理顺,投放動作才有可比較、可复盘的基础。