常见问题

入口页链接带跟踪参数或 #锚点,搜索蜘蛛会当成新 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 处理,可能产生额外的抓取请求;而 #锚点一般不触发新的抓取,也不能用于发现新页面。设计入口页时,尽量让链接指向最终、干净的目标地址,比堆参数更有效。