Google 的网址结构最佳实践

Google 支持 RFC 3986 中定义的网址。所有被这项标准定义为预留的字符都必须采用百分比编码。非预留 ASCII 字符可以保留未编码形式。此外,非 ASCII 范围内的字符应采用 UTF-8 编码。

尽可能在网址中使用易读的字词,而非冗长的 ID 编号。

建议:在网址中使用简单、说明性字词:

https://en.wikipedia.org/wiki/Aviation

建议:在网址中使用已本地化的字词(如果适用)。

https://example.com/lebensmittel/pfefferminz

建议:酌情使用 UTF-8 编码。例如,以下示例对网址中的阿拉伯语字符使用 UTF-8 编码:

https://example.com/%D9%86%D8%B9%D9%86%D8%A7%D8%B9/%D8%A8%D9%82%D8%A7%D9%84%D8%A9

以下示例对网址中的中文字符使用 UTF-8 编码:

https://example.com/%E6%9D%82%E8%B4%A7/%E8%96%84%E8%8D%B7

以下示例对网址中的变音字符使用 UTF-8 编码:

https://example.com/gem%C3%BCse

以下示例对网址中的表情符号使用 UTF-8 编码:

https://example.com/%F0%9F%A6%99%E2%9C%A8

不建议:在网址中使用非 ASCII 字符:

https://example.com/نعناع
https://example.com/杂货/薄荷
https://example.com/gemüse
https://example.com/🦙✨

不建议:在网址中使用不易读的、冗长的 ID 编号:

https://example.com/index.php?id_sezione=360&sid=3a5ebc944f41daa6f849f730f1

请勿使用片段更改网页内容,因为 Google 通常不支持网址片段。如果您要使用 JavaScript 更改内容,请改为使用 History API

不建议:网址片段:

https://example.com/#/potatoes

如果您的网站是多区域网站,请考虑使用一种便于对您的网站进行地理位置定位的网址结构。如要查看更多示例,了解如何处理网址结构,请参阅使用基于语言区域的网址

建议:采用特定国家/地区网域:

https://example.de

建议:搭配 gTLD 采用特定国家/地区子目录:

https://example.com/de/

不妨考虑在网址中使用连字符来分隔字词。这样有助于用户和搜索引擎更轻松地识别网址中的概念。建议您在网址中使用连字符 (-) 而非下划线 (_)。

建议:使用连字符 (-):

https://example.com/summer-clothing/filter?color-profile=dark-grey

不建议:使用下划线 (_):

https://example.com/summer_clothing/filter?color_profile=dark_grey

不建议:将网址中的字词连接在一起。

https://example.com/greendress

指定网址参数时,请使用以下常见编码:使用等号 (=) 分隔键值对,并使用和号 & 符号添加其他参数。如需在键值对中列出同一键的多个值,您可以使用与 IETF STD 66 LINK 不冲突的任何字符,例如逗号 (,)。

建议:使用等号 (=) 分隔键值对,并使用和号 (&) 添加其他参数:

https://example.com/category?category=dresses&sort=low-to-high&sid=789

建议:使用逗号 (,) 列出同一键的多个值,使用等号 (=) 分隔键值对,并使用和号 (&) 添加其他参数:

https://example.com/category?category=dresses&color=purple,pink,salmon&sort=low-to-high&sid=789

不推荐:使用冒号 : 分隔键值对,并使用大括号 [ ] 添加其他参数

https://example.com/category?[category:dresses][sort:price-low-to-high][sid:789]

不推荐:使用单个逗号 , 分隔键值对,并使用双逗号 ,, 添加其他参数

https://example.com/category?category,dresses,,sort,lowtohigh,,sid,789

与网址相关的常见问题

过于复杂的网址,特别是那些包含多个参数的网址,可能会给抓取工具带来麻烦,因为它们可能会产生大量不必要的网址,全都指向您网站上相同或相似的内容。Googlebot 可能会因此而消耗大量不必要的带宽,也可能无法将网站上的所有内容完整编入索引。

导致网址过多可能有多种原因,其中包括:

  • 累加过滤一组项目。很多网站都会针对同一组项目或搜索结果提供不同的视图,通常让用户能够使用指定的条件(例如:显示海景酒店)过滤出该组。当过滤条件可按累加模式组合时(例如:海景酒店,且配有健身中心),网站中网址(数据视图)的数量就会急剧增加。由于 Googlebot 只需查看少量列表就能访问各个酒店的网页,所以没必要创建大量只有细微差异的酒店列表。例如:
    • “特价”酒店房源:
      https://example.com/hotel-search-results.jsp?Ne=292&N=461
    • “特价”海景酒店房源:
      https://example.com/hotel-search-results.jsp?Ne=292&N=461+4294967240
    • 配有健身中心的“特价”海景酒店房源:
      https://example.com/hotel-search-results.jsp?Ne=292&N=461+4294967240+4294967270
  • 动态生成文档。由于计数器、时间戳或广告的影响,这可能会导致小幅变化。
  • 网址中的参数有问题。例如,会话 ID 可能会产生大量的重复内容和更多的网址。
  • 排序参数。某些大型购物网站会提供多种方式为相同的商品排序,因而造成网址数量大增。例如:
    https://example.com/results?search_type=search_videos&search_query=tpb&search_sort=relevance&search_category=25
  • 网址中存在不相关的参数,例如引荐参数。例如:
    https://example.com/search/noheaders?click=6EE2BF1AF6A3D705D5561B7C3564D9C2&clickPage=OPD+Product+Page&cat=79
    https://example.com/discuss/showthread.php?referrerid=249406&threadid=535913
    https://example.com/products/products.asp?N=200063&Ne=500955&ref=foo%2Cbar&Cn=Accessories.
  • 日历问题。动态生成的日历可能会生成指向未来及过去日期的链接,而这些日期没有开始或结束日期的限制。例如:
    https://example.com/calendar.php?d=13&m=8&y=2011
  • 损坏的相对链接。损坏的相对链接往往会导致无限空间。这个问题通常是由路径元素重复造成的。例如:
    https://example.com/index.shtml/discuss/category/school/061121/html/interview/category/health/070223/html/category/business/070302/html/category/community/070413/html/FAQ.htm

解决与网址相关的问题

若要避免网址结构可能导致的问题,建议您采取以下措施:

  • 创建简单的网址结构。建议您组织一下内容,使网址结构合乎逻辑并特别易于人类理解。
  • 考虑使用 robots.txt 文件阻止 Googlebot 访问有问题的网址。一般情况下应考虑阻止动态网址,例如会生成搜索结果或无限空间(比如日历)的网址。在 robots.txt 文件中使用正则表达式可以轻松拦截大量网址。
  • 尽可能避免在网址中使用会话 ID,而应考虑使用 Cookie。
  • 如果网络服务器对网址中的大小写文本的处理方式相同,请将所有文本转换为同一大小写形式,以便 Google 能够更轻松地确定相应网址引用的是同一网页。
  • 删去不必要的参数,尽可能缩短网址。
  • 如果您的网站具有未设置期限的日历,请为指向动态创建的未来日历页的链接添加 nofollow 属性。
  • 检查网站是否有损坏的相对链接。