谈到搜尋蜘蛛的URL發現,很多站点运营者首先想到的是内鏈、sitemap、面包屑這些主動引導方式,却容易忽略robots.txt這個看似基础的開關。實际上,robots.txt既會影响蜘蛛對一個URL的“訪問许可”,也會影响它對全站URL结构的理解方式。如果配置不当,可能让蜘蛛在發現层面就错失重要頁面,或者把抓取预算浪費在無意义的路径上。本文不讨论robots.txt的语法大全,而是從URL發現這個具体目标出發,聊聊規則顺序、通配符和响應方式中的几個细节。
robots.txt是URL發現的過滤器,不是入口
很多站点把robots.txt当作“入口名單”,以為只要放在那里蜘蛛就會来自動發現所有内容。實际上,蜘蛛通常先通過外部連結、sitemap、歷史记錄等方式拿到URL列表,然後才去請求robots.txt来確認能不能抓取。也就是说,robots.txt更多是充当一個過滤器:它不會主動帮助蜘蛛發現新URL,但可能把原本已经發現的URL過滤掉。
既然如此,站点运营者就需要反過来想:哪些URL是蜘蛛已经知道的?sitemap里列出的,外鏈指向的,内鏈可達的,都可能被蜘蛛尝试請求。如果robots.txt里Disallow了這些URL,蜘蛛會快速放弃,而且可能连带影响站点在蜘蛛眼中的整体可抓取性。举例来说,一些站点為了节省流量,把整個後台目錄Disallow,這当然可以。但如果誤伤到某類内容頁的层級,就會让批量添加的新内容迟迟無法被驗證。
規則顺序與匹配優先級:先Allow還是先Disallow
不同搜尋引擎對robots.txt的解析方式有差异,但主流引擎基本遵循最長匹配原則,而非简單的先後顺序。很多运营者在寫規則时喜欢把Disallow放在前面,再在後面用Allow放行子路径,這並不總是有效。比如:
Disallow: /a/如果後来又希望/a/download/可以抓取,僅增加一條Allow是不行的,因為/a/已经包含更深路径。正确寫法需要更具体的路径前缀。而针對同一級路径,引擎才會按照出現的顺序来判断,尤其是判断没有通配符时的精确匹配。
更常见的是想屏蔽某個參數但保留基础頁面,比如Disallow: /product?debug=,這没問题。但如果寫成Disallow: /product,就會把/products的正常列表也挡住。站点运营者需要观察蜘蛛實际請求的URL,而不是只從书面上推理。有一個小技巧:临时加一條Disallow,再查看日誌中蜘蛛是否還請求相關路径,如果仍然出現,說明規則没有完全命中。
常见配置誤区:過度屏蔽、通配符滥用、sitemap遗漏
第一種誤区是“屏蔽一切不必要文件”。有些優化建议让站点不開爬CSS/JS,以节省带宽。但搜尋引擎現在為了渲染頁面,需要抓取這些资源。如果完全Disallow,反而可能让蜘蛛無法把URL和頁面内容對應起来,導致URL發現後的质量评估受阻。比較合理的做法是允许蜘蛛抓取CSS和JS,或者至少對重要頁面不要屏蔽。
第二種誤区是滥用通配符。比如有的站点寫Disallow: /*?*,试图屏蔽所有带參數的URL,结果把sitemap中正常的參數化路径也拦住了,甚至可能干扰蜘蛛识別規范化版本。由于不同引擎對通配符的支持各不相同,不規范的寫法會让部分引擎直接忽略整條規則,造成原本想屏蔽的内容反而被抓取。
第三種誤区是robots.txt里没有给出sitemap路径,或者给出了错誤的绝對地址。虽然sitemap的提交並不完全依赖robots.txt,但在robots.txt中寫明Sitemap,相当于给蜘蛛一個額外的提示通道,尤其是對于新域名或者改版後的新结构,這個提示有助于蜘蛛尽早知道它應该發現哪些URL。注意這里的地址一定要寫成绝對的URL,並且能直接訪問到,而不是相對路径或需要跳轉的地址。
根據抓取日誌反推robots.txt的配置效果
實践检驗是使用robots.txt的最好方式。站点运营者可以定期查阅搜尋蜘蛛的抓取日誌,重点寻找“Disallow:xxx”的记錄。這些记錄表示蜘蛛原本對某個URL产生了兴趣,但因為robots規則而放弃了。仔细分析這些被拒绝的URL,往往能發現两類價值:一類是需要保留拒绝規則的隐私或重复頁面,另一類則是被誤伤的,比如带參數的打印版本来不该被屏蔽,或者某次寫規則时用了過宽的路径。
另外,還可以借助日誌考察robots.txt本身的請求频率。正常情况下蜘蛛不會频繁抓取這個文件,它會在會话開始或周期性检查更新。如果日誌中看到某只蜘蛛在极短時間反复請求robots.txt,可能是規則表達不清或服務器响應異常,也可能触發對站点的“抓取異常”标记。這種时候要检查服務器返回的狀態碼以及robots.txt文件是否過大、响應是否缓慢。
结合URL發現做規則分区
為了减少干扰,建议把站点URL按“需要被索引的内容”、“功能性但無需索引的頁面”、“纯资源路径”、“管理後台”做一個分区。然後在robots.txt里针對不同区設定策略,重点開放内容区。例如:
- 让搜尋蜘蛛可以抓取文章詳情、列表頁、分類頁,但限制抓取内部搜尋结果。
- 對带排序、篩選參數的URL,如果無法完全規范化,可以先Allow基础路径,再對個別參數做细化Disallow。
- 對于图片或视频文件,根據原站带宽情况决定是否允许抓取,但考虑到图片搜尋和富媒体展示,一般建议不屏蔽。
分区之後,可以在每條規則旁邊用注释寫清開放理由,方便後續维護。同时將sitemap中的URL與分区中的開放区域做一次比對,看是否存在sitemap列出的URL却被Disallow的情况,這是一個非常容易自查的漏洞。
規則内容不是越短越好,也不是越長越好
很多内容管理系統預設生成的robots.txt非常简短,只有简單的两行Allow或Disallow。這在小型站点也许够用,但站点结构复杂後,简單規則往往會遮住URL發現的有效路径。同时,某些SEO插件會生成一長串規則,里面有不少已经失效的目錄或者重复定义。長而冗余的規則容易造成解析时的歧义。
建议每半年检查一次robots.txt,比照網站新添加的栏目和功能模块,把不再需要的Disallow條目清理干净。记錄規則时尽量使用具体前缀,而不是大范围的模糊模式。比如要屏蔽一個标簽聚合頁,如果标簽頁都放在/tag/下,那么直接Disallow: /tag/即可,没必要一個一個加參數。
注意:robots.txt本身無法阻止其他非搜尋引擎的爬虫,它只是给遵守协议的蜘蛛一個信号。對于恶意抓取或采集,需要结合UA和频率限制等其他手段處理。
最後,請记得不要指望單靠robots.txt就能提升URL的收錄或排名。它的作用更像是一個清洁工,清出不该被發現的路径,保留有價值的入口。真正决定URL發現效率的,還是站点的内容更新频率、内鏈结构和外部引用信号。但如果在robots.txt上走了弯路,那些即使做好了内鏈的URL也可能被挡在门外。從今天起,拿出抓取日誌,對照規則检查一遍,也许就能让蜘蛛的URL發現之路顺畅不少。