先分清每個指令管的是哪一层
把抓取和索引分開看,很多冲突就不难理解。
- robots.txt:管抓取。它决定蜘蛛能不能把 URL 取回来,不决定頁面是否出現在结果里。
- meta robots 的 noindex 或 X-Robots-Tag:管索引。蜘蛛必须先把頁面抓回来,才能讀到這條指令。
- canonical:管規范化。它是建议而不是命令,搜尋引擎可以自行判断是否采纳。
- rel="nofollow" 與頁面級 nofollow:管連結。前者作用于單條連結,後者作用于整頁所有連結。
层級清楚了,冲突的大致顺序也就出来了:抓取层在前,索引层在後,規范化在两者之間做取舍。
几種常见的冲突寫法
robots.txt 屏蔽加 noindex
這是最典型的一對。頁面被 Disallow 後蜘蛛不會去抓,自然讀不到頁面里的 noindex。如果站内其他頁面或外部站点仍然連結到這個 URL,它的地址仍有可能出現在结果里,只是没有摘要。想让頁面彻底登出,通常要先允许抓取,让 noindex 被讀到,等它登出之後再考虑屏蔽。
noindex 加 canonical 指向別處
頁面上同时寫 noindex 和一條指向其他 URL 的 canonical,两條信号方向相反:一條说不要這個頁面,一條说這個頁面的正式版本在另一個地址。實际處理时 canonical 往往被忽略,頁面按 noindex 登出。如果本意是合並内容,應该只留 canonical;如果本意是刪除頁面,就该把 canonical 去掉或改成自指。
canonical 指向一個 noindex 頁面
多個頁面都把 canonical 指向同一個目标,而那個目标自己寫了 noindex。這種情况下,合並過去的信号落在一個不參與索引的地址上,等于白做。排查时顺手打開目标頁確認它的 meta robots,是個成本很低的习惯。
整頁 nofollow 加關键内鏈
頁面級 nofollow 會波及頁面上所有連結,包括導航和正文里的站内連結。如果你用它只是想控制某些外鏈的權重传递,這個寫法會连带减少站内 URL 的發現通道。更稳的做法是只對個別連結加 rel 属性。
一套從外到内的检查顺序
- 看 robots.txt 是否屏蔽了這個路径,以及是否有更長的規則被誤寫。
- 用日誌或抓取工具確認蜘蛛最近一次訪問的返回碼,排除 403、503 這類被中間层拦掉的情况。
- 確認渲染完成後的 HTML head 里有没有 noindex,注意由脚本注入的指令是否真的出現。
- 检查 canonical 指向谁,目标頁是否可索引、是否與目前頁内容重复。
- 最後看連結属性:哪些内鏈带了 nofollow,站内是否還有別的入口能到達這個 URL。
指令之間不是互相抵消的關系,後寫的不會覆盖先寫的。它們作用在不同环节,冲突时各自在自己的环节生效。
寫之前先問一句
每條指令背後最好只有一個目的。想禁止抓取就改 robots.txt,想登出索引就用 noindex,想合並重复内容就用 canonical。三種目的混在同一頁上,通常說明頁面的定位還没想清楚,先解决這個問题,比反复調整指令更省事。搜尋引擎的規則會更新,涉及關键頁面时建议對照官方文档確認目前行為。