這三個标簽在蜘蛛的哪一步生效
蜘蛛訪問一個入口頁,動作顺序大致是:發起請求、拿到 HTML、解析 head、决定要不要繼續抓正文、提取正文里的連結。meta 标簽在第三步就起作用,也就是说,它比頁面正文更早影响蜘蛛的判断。
三個标簽各管一件事,互不替代:canonical 管“哪一份是正本”,nofollow 管“連結跟不跟”,noindex 管“這個頁面收不收”。把它們混着用,或者凭感觉加一個“保險”,很容易把入口頁本该有的連結發現能力挡掉。
canonical:別把入口頁的正本身份让出去
入口頁的價值在于承载一批待發現的連結。如果给所有入口頁加上一個指向主站首頁的 canonical,等于告诉蜘蛛“這些頁面都是首頁的副本”。结果是這批頁面可能被合並進首頁,而首頁上並没有那么多目标連結,連結發現能力反而被集中到了一個不产生連結的地方。
几個常见誤操作:
- canonical 跨站指向目标站点。這等于把入口頁当作目标頁的副本,入口頁自身通常不會再被單獨保留。
- canonical 指向一個 302 地址、404 地址或不存在的 URL。蜘蛛會忽略或判定為無效,等于白设。
- 同一個頁面輸出了多個互相冲突的 canonical,多數情况下蜘蛛會忽略全部。
- canonical 由 JS 動態插入。不同爬虫對脚本的渲染能力差异很大,能服務端輸出就別靠脚本。
比較稳妥的做法是:入口頁之間如果要归並,指向一個真實存在、可正常抓取的入口聚合頁,不要跨站指向目标站,也不要把一批功能不同的入口頁统一 canonical 到首頁。
nofollow:頁面級和連結級的差別很大
nofollow 有两種用法,效果天差地別。
寫在 a 标簽上,只影响那一條連結;寫在 meta robots 里,影响整頁的所有連結。新手最容易犯的错,是担心“連結太多被当成作弊”,于是在入口頁 head 里加一個頁面級 nofollow,结果整頁目标連結一條都不會被跟随,入口頁彻底失去意义。
還需要注意:rel="nofollow" 在部分搜尋引擎眼里只是提示,但在另一些引擎里仍被比較嚴格地执行。如果你的流量来源以百度為主,頁面級 nofollow 的杀伤力會更明顯。rel="sponsored" 和 rel="UGC" 是给广告位和用戶投稿内容用的,不要拿来标入口頁的目标連結。
合理的用法是:只對确實不想被跟的連結單獨加,比如登入入口、隐私政策、後台地址這類噪音連結。
noindex:不收錄不等于不抓取
noindex 的作用是让頁面不進索引,但蜘蛛通常仍會抓取這個頁面,並且仍然會跟随頁面里的連結——前提是連結没有被 nofollow。
這一点對入口頁很關键。如果你的定位是“不想让入口頁出現在搜尋结果里,但希望它能带出目标連結”,那么 noindex + follow 是一组常见搭配。
但要注意两個坑:
- noindex 和 nofollow 同时加,等于“別收錄,也別跟連結”,入口頁的價值直接归零。
- robots.txt 里禁止抓取,同时又指望 noindex 生效。蜘蛛抓不到頁面,自然也讀不到 noindex,這個组合是死结。
另外,長期處于 noindex 狀態的頁面,回訪频率往往會下降。如果你的入口頁需要按节奏轮換目标連結,這一点會影响到轮換周期的設定。
常见组合對照
- 希望被收錄,也传递連結:預設狀態即可,不需要額外寫 index、follow。
- 不希望被收錄,但要传递連結:noindex, follow。
- 希望被收錄,但不传递連結:index, nofollow,入口頁场景里很少用。
- 既不收錄也不传递:noindex, nofollow,入口頁基本等于废頁。
注意,多個 robots 相關的 meta 标簽如果同时出現,蜘蛛一般按最嚴格的合並處理,所以別在同一頁里堆好几條。
上线前的自查動作
這三個标簽都属于“寫错了不會报错、但從資料上看不出来”的類型。建议在入口頁上线前做几件事:用命令行工具或查看頁面源代碼,確認 head 里實际輸出了什么,而不是只看模板文件;確認 canonical 只有一個,且指向的地址能正常打開;確認 robots meta 是服務端渲染出来的,不是脚本塞進去的。
入口頁的定位越單纯,标簽就應该越简單。一個只负责把連結摆出来让蜘蛛看到的頁面,通常不需要 canonical,也不需要頁面級 nofollow。加得越多,越容易把自己挡住。