做入口頁的人常常把精力花在标题、内容量和跳轉方式上,却忽略了一個更靠前的問题:這些頁面到底该不该让搜尋引擎抓。robots.txt、meta robots 和 canonical 這三样東西,用對了是分流和去重的工具,用错了就是自己把入口堵上,後面再怎么調内容都白搭。
先分清入口頁承担什么角色
屏蔽還是放開,取决于頁面在整批资源里的位置。通常可以分成三類:
- 纯發現型入口頁:本身没有獨立阅讀價值,任務只是把蜘蛛引向目标頁。
- 带内容的入口頁:有一定信息量,有可能被当作普通頁面收錄並參與展示。
- 重复型入口頁:同一批目标頁在不同域名或不同路径下反复出現,頁面之間高度相似。
角色不同,處理方式就不同。把三類頁面用同一套規則一刀切,是最常见的错誤来源。
robots.txt:管的是抓取通道,不是收錄狀態
robots.txt 决定蜘蛛能不能来抓,但它並不等于“頁面不會被收錄”。被 robots 挡住的 URL,如果別處有連結指向,仍然可能以無摘要的形式出現在结果里。所以用 robots.txt 挡一批入口頁时,要意识到你挡掉的是抓取,不是全部曝光。
在蜘蛛池的场景里,robots.txt 更适合做粗粒度的通道控制:
- 整站或某個目錄完全不需要被抓,直接 Disallow 掉,减少無效抓取。
- 只開放入口頁所在的路径,把後台、測試目錄、參數泛滥的搜尋结果頁排除在外。
- 不要用 robots.txt 去挡 CSS、JS 等静態资源,否則蜘蛛渲染頁面时會看到残缺版本。
另外要注意,Disallow 規則是前缀匹配,寫 /go 會把 /google-news 這類路径一起挡掉。多寫几條精确規則,比寫一條模糊規則更安全。
meta robots 與 X-Robots-Tag:單頁級別的開關
如果只有少數頁面需要特殊處理,用 meta robots 更合适,它不影响其他頁面。常用取值里,noindex 表示不要收錄,nofollow 表示不要沿着頁面上的連結繼續跟進,noarchive 表示不要保留快照。
這里有個容易忽略的点:noindex 和 nofollow 的作用完全不同。入口頁的任務就是让蜘蛛顺着連結走,如果在入口頁上加了 nofollow,等于把出口全部封死,頁面被抓了也没有意义。反過来,如果入口頁本身不想被收錄,用 noindex 就够了,不必顺手加 nofollow。
對于非 HTML 资源,或者不方便改頁面的情况,可以用 HTTP 响應头里的 X-Robots-Tag 達到同样效果。它和 meta robots 的语义一致,只是生效位置不同。
canonical 在蜘蛛池里的實际作用
canonical 的作用是告诉搜尋引擎“這一组相似頁面里,哪個是主版本”。在入口頁批量生成的环境下,它主要有两種合理用法:
- 同一份内容對應多個 URL(带參數、大小寫、末尾斜杠差异),把變体指向規范版本。
- 入口頁确實存在明顯的重复關系,且你希望其中一版被優先處理。
誤用也很集中:把所有入口頁的 canonical 全部指向首頁或目标頁。這種寫法等于告诉搜尋引擎“這些頁面都不是獨立内容”,入口頁基本不會被正常收錄,頁面上的連結價值也會被削弱。如果入口頁本来就不需要收錄,用 noindex 更直接,不需要绕道 canonical。
几個反复出現的誤区
- 同时用 noindex 和 canonical:两個信号互相干扰,蜘蛛通常不會按你期待的優先級處理。
- 用 robots.txt 屏蔽後又指望頁面被收錄:這两個目标本身就是矛盾的。
- 改完規則不做驗證:robots.txt 寫错一個字符,可能整站停止抓取,而這個過程往往几天後才發現。
- 忽略移動端與桌面端規則不一致:两邊 robots 或 meta 不同,會让抓取表現變得难以解释。
一套從整站到單頁的检查顺序
- 先看 robots.txt:是否誤挡了需要抓取的目錄和静態资源,規則是否有前缀誤伤。
- 再看頁面响應头:是否有意外的 X-Robots-Tag,尤其是接口或動態生成的入口頁。
- 然後看 meta robots:入口頁是否被誤加了 noindex 或 nofollow。
- 最後看 canonical:是否指向了不相關的頁面,是否與 noindex 冲突。
- 改完後用抓取工具或日誌回訪確認,別只看配置寫完就結束。
抓取控制在蜘蛛池里属于地基類的設定:它不直接带来效果,但設定错了,後面所有優化都會被削弱。與其反复調内容,不如先把這几行配置確認清楚。