搜尋抓取

連結寫法與 URL 發現:源碼里哪些入口真的能被跟随

搜尋蜘蛛發現 URL 依赖頁面里可跟随的連結,而不少入口在源碼层面就已经断了。本文從 a 标簽與 href 的寫法讲起,梳理脚本绑定点击、前端路由渲染、隐藏内容、表單與 iframe 等常见假連結,並說明 nofollow、頁面級限制、分頁加载與 Sitemap 兜底的處理思路,最後给出一份上线前的自查顺序。

搜尋抓取

連結寫法與 URL 發現:源碼里哪些入口真的能被跟随

搜尋蜘蛛發現 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 里、站内没有任何可跟随連結指向它,它被回訪的频率通常也不會高。

上线前的自查顺序

  1. 取一個典型頁面,禁用 JavaScript 後查看源碼,確認導航、面包屑、正文連結是否還在。
  2. 抽查連結的 href 是否為可解析地址,排除 javascript:、占位符和空值。
  3. 检查重要入口是否被 nofollow 或頁面級規則挡住。
  4. 確認列表頁翻頁有可跟随連結,而不是纯脚本追加。
  5. 核對 Sitemap 是否覆盖了内鏈薄弱但需要被發現的 URL。
  6. 用日誌观察這些入口對應的 URL 是否有持續的抓取记錄。

這些检查都不复杂,但顺序很重要:先確認連結存在且可跟随,再谈連結放的位置和數量。把這一层做扎實,URL 發現的地基才算立住。