搜尋抓取

除了 a 标簽:蜘蛛還能從哪些地方捡到 URL

蜘蛛發現 URL 的入口不止 a 标簽。canonical、hreflang、HTTP Link 头、Sitemap、Feed 和 JSON-LD 里的地址,作用各不相同:有的會被跟随,有的只是语义声明。本文梳理哪些位置值得投入,哪些不该当成唯一入口。

搜尋抓取

除了 a 标簽:蜘蛛還能從哪些地方捡到 URL

做站内連結的时候,大多數人的注意力都放在 a 标簽上:href 寫没寫、锚文本對不對、要不要加 nofollow。這当然没错,a 标簽确實是蜘蛛發現 URL 最稳定的入口。但一個頁面里能“说出”地址的地方遠不止 a 标簽,其中一部分蜘蛛會跟着走,一部分只是当作參考,還有一部分几乎不产生抓取行為。把這几類分清楚,能少走不少弯路。

蜘蛛通常會跟随的几種位置

在主流的抓取實現里,下面這些位置出現的 URL,一般會被当作可抓取线索:

  • a 标簽的 href:最基础也最可靠的一條路,站内導航和正文内鏈都應该走這里。
  • area 标簽的 href:老式图片热区地图里用得多,現在虽然少见,但依然有效。
  • iframe 的 src:是否被跟随取决于具体實現和渲染方式,正文内容不要只靠 iframe 承载。
  • link rel 系列:canonical、alternate 與 hreflang、next 與 prev、amphtml 這些声明,蜘蛛會讀取並按语义處理。
  • HTTP 响應头里的 Link:例如 rel=canonical 或 rel=preload 指向的地址,通常會被讀到,但優先級低于頁面内的真實連結。

JS 渲染出来的連結:能用,但別当成唯一通道

用脚本拼出来的 URL、绑定在点击事件上的跳轉、用 pushState 改寫的地址栏,這些對蜘蛛来说都不是天然的連結。支持渲染的抓取程序會把頁面执行一遍再提取連結,但中間隔着渲染队列和等待時間:脚本报错、内容要交互才出現、渲染超时,連結就可能被漏掉。

比較稳妥的做法,是让關键頁面在 HTML 里同时保留一份真實的 a 标簽。脚本负责体驗,不负责充当唯一的發現入口。

Sitemap 與 Feed:两條顯式投喂通道

Sitemap 是最直接的 URL 清單,尤其适合入口很深、内鏈很少的頁面。它的作用是告诉蜘蛛“這些地址存在”,並不保證一定被抓取或收錄。

RSS 或 Atom Feed 常被忽略。對更新频繁的栏目来说,Feed 是一條轻量的發現通道:新内容一發布就出現在一個体积小、结构稳定的 XML 文件里,蜘蛛拿取成本低。当然,它只對會去讀该文件的抓取程序起作用,替代不了站内連結。

JSON-LD 和结构化資料里的 URL

结构化資料里的 url、@id、sameAs 字段,主要用途是描述實体關系,而不是導航。蜘蛛會讀取這些内容,但其中的地址一般不會像 a 标簽那样被当成新的抓取入口。把重要頁面只寫在 JSON-LD 里,是常见的一厢情愿。

一張可以照着排的優先級清單

  1. 導航、面包屑、正文内鏈:用 a href,並确保服務端能渲染出真實地址。
  2. 深层頁面:补進 Sitemap,同时尽量在内鏈里给它一两個入口。
  3. 更新频繁的栏目:可以提供 Feed 作為辅助通道。
  4. 規范與多語言:用 canonical、hreflang 把语义說明白,別让蜘蛛去猜。
  5. 纯脚本入口:至少保留一個 HTML 連結作為兜底。
發現通道可以有很多條,但只有 a 标簽是你能完全掌控的那一條,其余的更适合当作补充。

最後提醒一句:URL 被蜘蛛看到、被抓取、被收錄,是三件不同的事。多铺几條發現路径,只是把“看到”這一步做得更稳,後面的结果仍然取决于内容本身和站点整体的抓取状况。