首页 / SEO book / 网站架构与迁移 / URL 参数:面向 SEO 从业者的完整指南

URL 参数:面向 SEO 从业者的完整指南

URL 参数:面向 SEO 从业者的完整指南网站架构与迁移

URL 参数由“键-值”对组成,键标明传递的数据类型,值是所传递的数据,例如某个标识符。参数形如 ?key=value,当存在多组时,通常用 & 符号分隔……

URL 参数(或称查询字符串)跟在问号(?)之后,随 URL 一起传递数据。它们既可以是修改页面内容的主动参数,也可以是主要用于跟踪、不改变内容的被动参数。

URL 参数由“键-值”对组成,其中键告诉你传递的是什么数据,值则是你传递的数据,比如某个标识符。它们看起来像 ?key=value,但当存在多组“键-值”对时,可能会用 & 符号分隔,形如 ?key=value&key2=value2。

URL 参数示例

本指南将介绍 URL 参数需要了解的全部内容。

URL 参数如何使用

如引言所述,参数可以是主动的,也可以是被动的。下面分别举例。

主动参数

主动参数会以某种方式修改页面的内容。

筛选(Filter)。移除部分内容,在页面上留下用户想要看到的更具体的内容。电商网站中的分面导航(faceted navigation)就是一个例子。

[['Text', '?color=yellow']]

排序(Sort)。以某种方式重新排列内容,比如按价格或评分排序。

[['Text', '?sort=highest_rated']]

分页(Paginate)。把内容分成一系列相关页面。

[['Text', '?p=2']]

翻译(Translate)。更改内容的语言。

[['Text', '?lang=de']]

搜索(Search)。就用户正在查找的信息查询某个网站。

在我们的搜索引擎 yep.com 上,我们用“q”作为键,其值包含用户查询的信息。

[['Text', '?q=ahrefs']]

被动参数

被动参数不会改变内容,它们通常用于跟踪。下面分别举例。

联盟 ID(Affiliate IDs)。传递一个标识符,用于跟踪销售和注册来自哪里。

[['Text', '?id=ahrefs']]

广告标签(Advertising tags)。跟踪广告投放活动。

[['Text', '?utm_source=newsletter']]

会话 ID(Session IDs)。标识某个特定用户。在现代网站上,用会话 ID 来跟踪用户并不常见。

[['Text', '?sessionid=12345']]

视频时间戳(Video timestamps)。跳转到视频中指定的时间点。

[['Text', '?t=135']]

URL 查询参数对 SEO 的影响

在 SEO 方面,URL 参数可能引发一系列不同的问题,尤其是当 URL 中包含多个参数时。以下是你可能遇到的一些问题。

被动参数可能引发重复内容方面的问题。通常,你希望它们能被抓取,并且每个页面都应设置一个指向主版本的规范标签。

有时,你可能希望用 robots.txt 彻底阻止这些参数被抓取——但仅限于你可能会遇到抓取预算问题的情形。我们稍后会进一步讨论这一点。

Google 会通过一个称为规范化(canonicalization)的过程选定要索引的页面版本,链接等信号也会汇聚到这个被索引的版本上。

主动参数可能会生成内容近似重复的页面,或者与其他内容非常相似的页面,也可能生成完全不同的内容。你需要检查你的参数实际用于什么用途。

内链

你应避免在内链(即网站内从一个页面指向另一个页面的链接)上使用像跟踪参数那样的被动参数。

这在大型网站上仍是一种极为常见的做法,但需要强调,这是一种陈旧而过时的做法,不应再采用。

大多数分析系统都有事件跟踪功能,可改用它们记录数据,而无需在 URL 中添加参数。

在大多数情况下,在内链上使用主动参数是没有问题的。

抓取

带有参数或存在大量不同组合的无限 URL 路径,可能会引发抓取问题。请保持一致顺序,并避免出现允许添加额外参数的路径。

你可以借助 Site Audit 中 Structure Explorer 工具下的深度(Depth)报告,轻松找出潜在的无限路径。网站出现 9 层以上深度并不常见,因此这是一个强烈的信号,表明可能确实存在无限路径或其他问题。

Structure Explorer 的 Depth 报告有助于揭示因 URL 参数问题产生的无限路径

当 Google 在抓取过程中识别出无限路径或某些模式时,会做出相应调整。它会尽量限制抓取那些它认为没用或重复的 URL。

用于国际化的参数

URL 参数有时会被用于国际化网站。它们被列为针对特定地区的 URL 的一种可选方案。但即便是 Google 也说不推荐这么做。它会增加一层额外的复杂性,让更多环节可能出错。此外,你也无法在 Google Search Console 中为这些 URL 做地理定位。

电商参数

参数在电商中被广泛用于方方面面——从跟踪,到分页,再到分面导航。这些话题可能相当复杂,因此建议阅读我链接的这些博文,以更好地理解它们。

JavaScript URL 参数

有一种日益流行的趋势:人们用 # 代替 ? 作为片段标识符,尤其是对跟踪这类被动参数而言。这通常不是个好主意。但在某些特定情况下,用它来替换不必要的参数或许可以。由于会引发种种问题,我倾向于建议不要这么做。

问题在于,# 之后的内容会被服务器忽略,而且许多系统根本不会或无法识别使用 # 的参数。

此外,# 已经有一个既定用途,即滚动到页面的某个部分。这一操作在客户端完成,而 JavaScript 开发者也可能用它来做“路由”,跳转到内容不同的页面。

审核 URL 参数引发的 SEO 问题

检查你的网站上使用了哪些查询参数,是个好主意。在 Site Audit 的页面浏览器(Page Explorer)工具中,你可以搜索包含问号(?)的 URL。

在 Page Explorer 中搜索查询参数

你可以使用高级筛选器,找出带有多个参数的页面,或者开始排除某些参数,从而帮助你识别网站上用到的所有各种参数。

一旦你知道用到了哪些参数,我建议你抽查几个页面,看看这些 URL 参数实际起了什么作用。

你也可以查看重复内容(Duplicates)报告,找出完全重复或近似重复的内容。这种可视化呈现让你很容易看出,自己是否有大量相同或相似页面的多个版本,以及它们是否带有相匹配的规范标签来选定首选版本。你可以点击每个簇群以获取更多信息。

重复内容树状图

在“Bulk export(批量导出)”下还有一个选项,可以让你一次性导出所有重复内容。对于较大的数据集,我觉得这个选项更易用。

控制参数

过去,Google 在 Google Search Console 中有一个 URL 参数工具,你可以根据某个参数是否改变页面内容,来选择如何对待不同的参数。该工具已于 2022 年初被弃用。以下是 Google 对此的说明:

2009 年 URL Parameters 工具在 Search Console 的前身 Webmaster Tools 中推出时,互联网比今天要“野”得多。SessionID 参数非常普遍,CMS 难以理清参数,浏览器也经常弄坏链接。有了 URL Parameters 工具,网站所有者可以通过指定某些参数如何影响其网站内容,来精细地控制 Google 抓取他们网站的方式。多年来,Google 在猜测哪些参数对网站有用、哪些参数其实毫无用处方面,已经变得强得多。事实上,目前在该 URL Parameters 工具中指定的大约只有 1% 的参数配置对抓取是有用的。鉴于这个工具对 Google 和 Search Console 用户的价值都很低,我们将在 1 个月内弃用 URL Parameters 工具。

虽然声明里没有提到,但可以推测,有些用户可能反而因为这个工具害了自己。过去就遇到过这种情况:有人设置了错误的选项,声称内容没有变化,但实际上变了不少。结果那个网站有几十万个页面被踢出了索引。

你可以让 Google 去抓取并自行决定如何处理这些参数,但你也有一些可以运用的控制手段。下面来看你的选择。

规范标签(Canonical tags)

规范标签有助于把信号汇聚到选定的 URL 上,但它要求每个额外的页面版本都被抓取。正如前面提到的,Google 在识别出模式后可能会做出调整,随着时间推移,这些被规范化的 URL 被抓取的次数可能会减少。

这是我会默认采用的做法。但如果一个网站问题一大堆、参数严重失控,我可能会考虑其他一些选择。

Noindex

noindex meta robots 标签会把页面从索引中移除。这要求页面被抓取。但同样,随着时间推移它可能被抓取得更少。如果你需要把信号汇聚到其他页面,我会避免使用 noindex。

在 robots.txt 中屏蔽

在 robots.txt 中屏蔽参数,意味着这些页面仍可能被索引,但它们不太可能出现在正常的搜索结果中。

问题在于,这些页面不会被抓取,也不会汇聚信号。如果你想汇聚信号,就应避免屏蔽这些参数。

Site Audit

在 Site Audit 中设置项目时,抓取设置里有一个名为“Remove URL Parameters(移除 URL 参数)”的开关,你可以用它来忽略任何带参数的 URL。

你也可以在抓取设置中使用模式匹配来排除带参数的 URL。

在抓取设置中屏蔽某个参数

总结

概括来说,URL 参数有很多不同的用途,它们未必会给你的网站带来问题。一切都要视具体情况而定。

如果你有任何问题,可以在 Twitter 上给我发消息。