搜尋蜘蛛發現 URL,主要靠跟随 HTML 源碼里的連結。很多人把注意力放在連結放了多少、放在哪個位置,却忽略了更前置的問题:這些連結在源碼里到底是不是一條能被跟随的連結。位置再好,寫法不對,等于没有入口。
一條可被跟随的連結長什么样
判断标准其實很朴素:打開頁面的查看源代碼,在 HTML 里能不能看到一個带 href 的 a 标簽,href 的值是不是一個完整的、可解析的地址。
- a 标簽加 href:最可靠的形式,路径可以用绝對地址,也可以用相對地址。
- href 指向真實頁面:不是 javascript:void(0),不是單獨的 #,不是空值。
- 不依赖脚本执行:連結在初始 HTML 里就存在,而不是等前端路由渲染完才出現。
几種常见的假連結
下面這些寫法在浏览器里点起来没問题,但對 URL 發現来说是断的。
用脚本绑定点击
把跳轉寫在 onclick、事件监听或者框架的路由方法里,标簽可能是 div、span、button。浏览器能跳,源碼里却没有一條可跟随的地址。
整站靠前端路由渲染
單頁應用如果只輸出一個空容器,首屏連結都要等脚本跑完才有,就等于把所有入口押在渲染结果上。至少應该让關键導航和列表在服務端渲染或预渲染阶段輸出。
隐藏與折叠内容里的連結
display:none、高度為零、被彈层遮挡的連結,處理方式並不统一。更稳妥的做法是让重要入口留在正常可见的 DOM 里。
表單、图片與 iframe
POST 表單提交的地址不构成跟随入口;图片連結和 iframe 里的内容即便能被處理,也不如一條普通 a 标簽清晰可预期。
rel 属性與頁面級限制
連結存在,不等于一定會被跟随。nofollow、sponsored、ugc 這類 rel 值會影响跟随判断;頁面头部的 meta robots 或 X-Robots-Tag 也會限制整頁連結的處理。核對时要把連結存在和連結可跟随分開看。
發現是抓取的前一步。入口没有暴露出来,後面的抓取、渲染、索引都無從谈起。
分頁與加载更多的入口處理
列表頁的後續内容如果只能通過按钮触發脚本追加,那么第二頁之後的 URL 就没有稳定入口。常见做法是保留一组可跟随的分頁連結,脚本加载只作為体驗優化;如果确實不想暴露分頁地址,也要考虑這些 URL 通過 Sitemap 或其他内鏈被發現的方式。
内鏈和 Sitemap 的關系
Sitemap 是补充入口,不是替代品。它适合提交那些内鏈覆盖不到、层級較深的 URL。反過来,如果一個 URL 只出現在 Sitemap 里、站内没有任何可跟随連結指向它,它被回訪的频率通常也不會高。
上线前的自查顺序
- 取一個典型頁面,禁用 JavaScript 後查看源碼,確認導航、面包屑、正文連結是否還在。
- 抽查連結的 href 是否為可解析地址,排除 javascript:、占位符和空值。
- 检查重要入口是否被 nofollow 或頁面級規則挡住。
- 確認列表頁翻頁有可跟随連結,而不是纯脚本追加。
- 核對 Sitemap 是否覆盖了内鏈薄弱但需要被發現的 URL。
- 用日誌观察這些入口對應的 URL 是否有持續的抓取记錄。
這些检查都不复杂,但顺序很重要:先確認連結存在且可跟随,再谈連結放的位置和數量。把這一层做扎實,URL 發現的地基才算立住。