在抓取這件事上,robots.txt 常被当成一個“開關”——想让搜尋引擎少收錄点東西,就寫一條 Disallow。但它實际管的不是收錄,而是蜘蛛能不能来抓。更值得留意的是:一條 Disallow 拦住的往往不只是一個頁面,還會顺手切断這條路径上挂着的内鏈线索。
一條 Disallow,為什么影响的不止一條 URL
蜘蛛認识網站的方式很朴素:從一個 URL 出發,讀到頁面里的連結,再顺着連結走到下一個 URL。列表頁、聚合頁、标簽頁、分頁頁,通常是全站出鏈最密集的地方,很多詳情頁的第一條线索就来自這里。
如果這些目錄被 Disallow 挡住,蜘蛛進不去,自然也就讀不到里面的連結。结果就是:某些詳情頁明明在 Sitemap 里躺着,站内却几乎没有任何一條可被抓取的路径指向它,只能長期停在“已發現未抓取”。
容易誤伤的几種路径
- 搜尋頁與篩選參數頁,例如 /search/、?filter= 這類地址被整段拦掉,而它們身上常常背着大量指向商品的連結。
- 标簽頁、专题聚合頁。它們本身内容單薄,但出鏈數量往往最多。
- 分頁路径,把第二頁之後全部挡掉,等于让蜘蛛只看到列表的第一屏。
- CSS 與 JS 目錄。渲染需要這些资源,拦掉之後頁面在蜘蛛眼里可能是空的。
- 語言切換或移動端路径,寫規則时顺手複製,容易连主站路径一起覆盖。
记住一点:Disallow 是“別来抓”,noindex 是“可以抓,但別收錄”。想减少收錄却保留連結传递,用 noindex;根本不想让蜘蛛碰,才用 Disallow。
线索断掉之後,怎么补回来
用 Sitemap 保住 URL 本身
Sitemap 能让蜘蛛知道“這個地址存在”,但解决不了頁面之間怎么走的問题。它可以作為兜底线索,替代不了内鏈。
把内鏈挪到可抓取的頁面上
在栏目首頁、文章底部相關推荐、面包屑里补一條指向目标頁的連結,通常比反复提交 Sitemap 更直接。线索要落在蜘蛛進得去的地方,才有意义。
用 Allow 做局部放行
robots 規則按最長匹配優先。如果只是不想让某類參數被大量抓取,可以在拦掉整個目錄之後,對具体需要保留的路径單獨 Allow,而不是一刀切。
怎么確認路径确實被截断了
- 翻服務器日誌,看被拦目錄是否長期没有蜘蛛請求,同时統計该目錄原本承载了多少内鏈。
- 用 robots 測試工具,逐條检查關键路径是被拦還是放行。
- 把 Sitemap 里提交的 URL 數量,和日誌里實际被抓取的數量做一次對比。
- 观察“已發現未抓取”的數量變化,如果它和某次 robots 修改的時間接近,基本可以定位原因。
把它当成一次常規检查
robots.txt 改動的影响不會当天全部顯現,往往要等几轮抓取周期才看得清楚。建议改規則之前先想三件事:這條路径上有没有内鏈、這些連結指向的頁面還有没有別的入口、拦掉之後抓取预算是不是真的省下来了。如果省下的预算換来一批頁面失去线索,這筆帳並不划算。