搜尋抓取

图片、脚本與 iframe 里的 URL:蜘蛛會把這些当抓取入口吗

頁面上出現 URL 的地方遠不止 a 标簽:图片的 src、脚本里的路径、iframe 的地址、canonical 與结构化資料里都會寫地址。但這些位置對蜘蛛的意义並不相同,有的只是被請求的资源,有的參與 URL 归並,真正能撑起抓取路径的仍然是有序的站内連結。

搜尋抓取

图片、脚本與 iframe 里的 URL:蜘蛛會把這些当抓取入口吗

蜘蛛拿到一個頁面後,先找什么

蜘蛛下载一份 HTML 之後,第一件事是解析。解析的结果有两层用途:一层是理解這個頁面讲了什么,另一层是把頁面里出現的 URL 收集起来,放進待抓队列。很多人預設「URL 都在連結里」,實际上一份普通頁面上的 URL 出處比想象中多。

把這些来源理清楚,才能判断某個入口值不值得依赖。

不同位置的 URL,被對待的方式不一样

a 标簽的 href

這是最明确的信号。蜘蛛看到一個 a 标簽,會把它理解成「這里指向另一個頁面」,並且倾向于繼續跟進。锚文本還會影响它對目标頁面的判断。内鏈结构能不能起作用,基本取决于這一层寫得清不清楚。

img 的 src 與 srcset

图片地址會被抓,但抓的是图片本身。蜘蛛通常不會把一張图的 URL 当成一個需要繼續爬的頁面入口。srcset 里的多套尺寸同理,它带来的是资源請求量,而不是頁面發現。

script、link 與样式表

外鏈 JS 和 CSS 會被請求,因為渲染需要它們。至于文件内部的字符串,比如路由表里拼接出来的路径、接口地址,通常不會因為出現在 JS 里就直接進入抓取队列。這也是纯前端路由頁面容易被漏掉的原因:它們在 HTML 层面看起来就是没有連結。

iframe

iframe 指向的文档是另一份獨立资源,可能被單獨抓取,但它與主文档之間的關系不像普通内鏈那样传递,也不适合当作主站頁面的發現路径来用。

link 與结构化資料里的 URL

canonical、alternate、hreflang 里的地址,主要作用是告诉蜘蛛「這几條 URL 描述的是同一頁」或者「這是另一種語言版本」。它們參與 URL 归並,但不會被当成普通的内鏈入口去分發抓取机會。JSON-LD 里寫的 URL 也類似,更多是补充信息。

真正能控制抓取路径的還是内鏈

上面這些位置可以帮蜘蛛發現资源,却很难帮它發現頁面。如果希望某個詳情頁被稳定看到,務實的做法是给它一條清晰的 a 标簽路径:

  • 栏目頁里给出到詳情頁的直達連結,而不是只放一張图或一個按钮
  • 面包屑用 a 标簽寫,別拿纯文本分隔符凑數
  • 相關推荐、上一頁下一頁保持真實連結
  • 分頁與篩選入口按需開放,避免组合數量失控

内鏈的價值不只是「有一條路」,還包括這條路有多顺。层級浅、文本清楚、指向稳定的連結,跟進意愿更高,站内頁面之間分到的机會也更均匀。

Sitemap 是补漏,不是替代

Sitemap 适合放那些内鏈覆盖不到、又确實希望被抓的 URL,比如新上线的頁面、埋在深處的存档頁。它相当于给蜘蛛一份額外清單,但不能替代站内連結。一個頁面既没有内鏈入口,又長期没有外部連結指向,只靠 Sitemap 出現,被抓的频率往往偏低,後續更新也不容易被及时發現。

動手检查的几個点

  • 用不执行 JS 的方式打開頁面,看還剩多少條 a 标簽連結
  • 在浏览器里检查導航、面包屑、列表頁的連結是不是真的 href,而不是 onclick 或 JS 跳轉
  • 看看關键頁面從首頁出發需要几跳,有没有绕遠路
  • 確認 Sitemap 里的 URL 與站内實际連結指向同一套地址,別出現 http 與 https、带不带 www 混用
  • 留意服務器响應是否稳定,响應時間波動大时,抓取节奏往往會跟着收缩
URL 發現是抓取的前置條件。把入口放在蜘蛛看得懂的地方,比事後补交清單更省事。