常见問题

入口頁連結带跟踪參數或 #锚点,搜尋蜘蛛會当成新 URL 抓取吗?

入口頁里的連結如果带上統計參數或 #锚点,搜尋蜘蛛的處理方式並不一样。本文說明查询參數通常會被当成獨立 URL 抓取、可能重复消耗抓取配額,而锚点一般不触發新請求,也不能用于發現新頁面,並给出入口頁連結寫法的收敛建议。

常见問题

入口頁連結带跟踪參數或 #锚点,搜尋蜘蛛會当成新 URL 抓取吗?

在做入口頁(蜘蛛池里常说的“放連結的頁面”)时,有人习惯在連結後面带上統計參數,或者用 #锚点 定位到頁面某個位置。這類連結被搜尋蜘蛛讀到之後會被怎么處理,是很多站長關心的問题。答案要分两種情况看:查询參數和 URL 片段(fragment)的机制並不一样。

先分清“發現”和“抓取”

搜尋蜘蛛解析入口頁 HTML 时,會把 a 标簽的 href 提取出来放進待抓取队列,這一步是 URL 發現。真正發出 HTTP 請求、拿到内容,才叫抓取。參數和锚点在這两步里的表現不同,影响也不一样。

带查询參數的連結:會被当成獨立 URL

如果入口頁里寫的是 /article?id=123&utm_source=spider,搜尋蜘蛛大概率會把整個字符串当作一個 URL 對待。也就是说:

  • 它可能單獨發起一次抓取請求;
  • 同一個内容會因為參數不同,在抓取队列里出現多個條目;
  • 只有当頁面本身给出足够强的合並信号(比如 canonical 指向不带參數的版本)时,這些副本才可能被归並。

對入口頁来说,這意味着輸出大量带參數的連結,會消耗掉本来就不多的抓取配額,真正想被發現的目标 URL 反而可能被排在後面。

#锚点:一般不會产生新的抓取請求

URL 里的 # 後面部分叫片段标识符,浏览器不會把它發给服務器,搜尋蜘蛛抓取时同样不會。所以入口頁里寫 /page#section2 和 /page#section5,對爬虫来说指向的都是同一個 /page,一般不會因為锚点不同而多抓一次。

例外是單頁應用里常见的 hash 路由(類似 #!/detail/123)。這類寫法把内容标识放在片段里,传统爬虫不一定能识別,現在多依赖渲染能力,能不能發現目标内容並不稳定。

對入口頁的實际影响

  • 參數連結會放大 URL 數量,稀释抓取预算;
  • 同一目标被多個參數版本連結,可能被反复抓取,日誌里看起来“抓了很多”,實际覆盖的新 URL 很少;
  • 锚点連結不會帮忙發現新頁面,只能影响頁面内的跳轉位置;
  • 如果入口頁連結的目标不在自己手里,你很难保證對方會加 canonical 来合並這些變体。

比較稳妥的做法

  1. 入口頁輸出的目标連結尽量用干净的、不带跟踪參數的 URL;
  2. 确實需要參數时,控制數量,別让一個目标對應几十個變体;
  3. 在自己能控制的站点上,對參數頁加 canonical 或 robots 規則,减少重复;
  4. 锚点只用于頁内導航,不要指望它能带来新的 URL 發現;
  5. 定期看抓取日誌,观察參數型 URL 占比,占比過高就說明入口頁寫法需要收敛。
抓取配額是有限的。入口頁每多輸出一類没有實际意义的 URL 變体,就可能少抓一個真正需要被發現的頁面。

總结一下:带查询參數的連結通常會被搜尋蜘蛛当作獨立 URL 處理,可能产生額外的抓取請求;而 #锚点一般不触發新的抓取,也不能用于發現新頁面。设計入口頁时,尽量让連結指向最终、干净的目标地址,比堆參數更有效。