很多站点在排查抓取問题时,會先看 Sitemap、再看日誌,最後才發現一個尴尬的情况:某些 URL 明明寫在 Sitemap 里,服務器也能正常返回 200,但翻遍全站的内鏈,没有任何一個可点击的入口指向它。這類頁面通常被称為孤岛頁面,它們不是打不開,而是没人带着蜘蛛走過去。
為什么内鏈往往比 Sitemap 更早带来抓取
Sitemap 更像一份清單,它告诉蜘蛛這些地址存在,但不保證蜘蛛會按顺序、按時間把每一行都走一遍。内鏈不一样,它是蜘蛛在渲染頁面时顺着 href 一路走出来的路径,属于站点结构的一部分。一個 URL 被多個相關頁面連結,意味着它處在一條真實的浏览路径上,被發現的概率和频次通常都會更稳定一些。
換句话说,Sitemap 解决的是交代清單,内鏈解决的是铺路。两者不冲突,但清單不能替代路。
孤岛頁面通常是怎么产生的
- 歷史活動頁、专题頁下线後没有做 301,也没有從栏目里移除連結,最後連結被删、頁面還在。
- 批量生成的标簽頁、篩選頁,只在某一次改版中出現過入口,改版後入口消失。
- 後台導出的資料頁、接口生成的詳情頁,只能靠直接訪問 URL 到達。
- 分頁翻到很後面的列表頁,前面的頁面已经不再連結過去。
- 只在 JavaScript 渲染後才插入的連結,静態 HTML 里看不到。
這些頁面的共同点是:能返回内容,但在站内找不到一條稳定、可点击的到達路径。
怎么把孤岛頁面找出来
- 日誌與 URL 清單比對。把 Sitemap、資料库里的 URL 和一段時間内的抓取日誌做差集,長期没有被抓、也没有被訪問的地址,多半就是孤岛。
- 做一次站内連結統計。用爬虫工具從首頁出發抓一遍,看哪些 URL 出現在 Sitemap 里却没有出現在任何一次抓取的連結列表中。
- 区分無内鏈和内鏈很深。有的頁面只是层級偏深,仍然能被走到;真正的孤岛是完全没有任何入鏈。
- 確認狀態碼和渲染方式。排除掉 404、301 和必须执行脚本才出現的連結,避免把技術問题誤判成结构問题。
把孤岛頁面接回主路径的常见做法
- 补一條语义相關的内鏈。從内容相關的文章、同級頁面里加自然連結,比在頁脚堆連結更有效。
- 做聚合入口。用列表頁、专题頁、标簽頁把同類 URL 收拢,再让聚合頁從栏目或導航可達。
- 用好面包屑和上下級導航。让每個詳情頁都有明确的上一层出口,蜘蛛顺着层級就能走回来。
- Sitemap 作為补充。给确實不适合出現在導航里的頁面保留 Sitemap 位置,同时接受它被發現得慢一些。
- 控制孤岛的數量。如果批量頁面注定没有入口,就要考虑它們是否真的需要對外可訪問。
内鏈改造不追求一次到位,先让重要頁面從零入鏈變成至少一條稳定入鏈,比一次性堆几十個連結更稳妥。
改造之後看什么
改完之後不要只看收錄數量。可以先观察抓取日誌里這些 URL 的出現频次、抓取时返回的狀態碼,以及抓取後是否有新的連結被带出来。如果一段時間内仍然只有零星抓取,就要回头检查入鏈的位置是否足够靠前、是否被渲染出来、頁面本身是否值得抓。
服務器稳定性同样會影响结果:入口頁响應慢或者間歇性返回 5xx,蜘蛛走到一半就断了,後面的孤岛自然更没机會被發現。所以内鏈梳理最好和稳定性检查放在一起做。
孤岛頁面不是靠提交就能一劳永逸解决的,它更像是站点结构里漏掉的几段路。把路补上,Sitemap 和主動提交才有意义。