现在的位置: 首页 > 综合 > 正文

sitemap格式详解

2012年09月28日 ⁄ 综合 ⁄ 共 9141字 ⁄ 字号 评论关闭
概述

Sitemaps 协议使您能够告知搜索引擎您网站中可供抓取的网址。最简便的方式就是,使用 Sitemaps 协议的 Sitemaps 就是列有某个网站所有网址的 XML 文件。此协议可高度扩展,因此可适用于各种大小的网站。它还能够使网站管理员提供有关每个网址的其他信息(上次更新的时间、更改的频率、与网站中其他网址相比它的重要性)以便搜索引擎可以更智能地抓取该网站。

Sitemaps 在用户无法通过可浏览界面访问网站的所有区域时作用尤其明显。(通常,指用户无法通过追踪链接访问网站的特定页面或区域。)例如,那些只能通过搜索表单才能访问其中某些页面的网站都会从创建 Sitemaps 并将其提交到搜索引擎中获益。

此文件说明 Sitemaps 文件的格式,并解释您张贴 Sitemaps 文件的位置以便搜索引擎能够检索到。

请注意 Sitemaps 协议补充而不是取代搜索引擎已用来发现网址的基于抓取的机制。通过向搜索引擎提交一个 Sitemaps(或多个 Sitemaps),可帮助搜索引擎更好地抓取您的网站。

使用此协议并不能保证搜索索引中将包含您的网页。(请注意,使用此协议不会影响 Google 对您网页进行排名的方式。)

Sitemaps 0.84 是依据 Attribution-ShareAlike Creative Commons License 的条款提供的。

XML Sitemaps 格式

Sitemaps 协议格式由 XML 标记组成。Sitemaps 的所有数据数值应为实体转义过的。文件本身应为 UTF-8 编码的。

以下是只包含一个网址并使用所有可选标记的 Sitemaps 示例。可选标记为斜体。

<?xml version="1.0" encoding="UTF-8"?>
  < urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
   < url>
    < loc>http://www.example.com/</loc>
    < lastmod>2005-01-01</lastmod>
    < changefreq>monthly</changefreq>
    < priority>0.8</priority>
   </url>  
  </urlset>

Sitemaps 应:

  • <urlset> 开始标记开始,以 </urlset> 结束标记结束。
  • 每个网址包含一个作为父标记的 <url> 条目。
  • 每一个 <url> 父标记包括一个 <loc> 子标记条目。

XML 标记定义

以下对可用 XML 标记进行说明。

<urlset>
必填 封装此文件并提供当前协议标准作为参考。
<url>
必填 每个网址条目有一个父标记。剩余标记为此标记的子标记。
<loc>
必填 该页的网址。如果您的 Web 服务器需要网址的话,此网址应以协议开始(例如:http)并以斜线结尾。此值应少于 2048 个字符。
<lastmod>
可选 该文件上次修改的日期。此日期应采用 W3C Datetime 格式。如果需要的话,此格式允许省略时间部分,而仅使用 YYYY-MM-DD。
<changefreq>
可选

页面可能发生更改的频率。此值为搜索引擎提供一般性信息,可能与搜索引擎抓取页面的频率不完全相关。有效值为:

  • always
  • hourly
  • daily
  • weekly
  • monthly
  • yearly
  • never

值“always”应当用于描述每次访问时都会改变的文档。而值“never”应当用于描述已存档网址。

请注意此标记的值被视为提示而不是命令。尽管搜索引擎抓取工具在做决定时考虑此信息,但是它们对标记为“hourly”页面的抓取频率可能低于每小时一次,而对标记为“yearly”页面的抓取频率可能高于每年一次。抓取工具也可能定期抓取标记为“never”的页面,以便它们能够处理对这些页面的意外更改。

<priority>
可选

此网址的优先级与您网站上其他网址的优先级相关。有效值范围从 0.0 到 1.0。此值不会影响您的网页与其他网站上网页的比较结果,只是告诉搜索引擎您认为您的那个网页最重要,从而它们对您页面的抓取可以按照您最喜欢的方式进行排序。

一个网页的默认优先级为 0.5。

请注意,您为页面指定的优先级不影响您的网址在搜索引擎的结果页的排名。搜索引擎在同一网站的不同网址之间进行选择时使用此信息,因此,您可以使用此标记来增加相对重要的网址在搜索索引中显示的可能性。

而且,请注意为您网站中的所有网址都指定高优先级对您没什么好处。由于优先级是相互关联的,只用于在您自己网站的网页之间进行选择;您网页的优先级不会与其他网站的页面优先级进行比较。

实体转义

我们要求您的 Sitemaps 文件为 UTF-8 编码(通常在保存文件时可以做到)。对于所有的 XML 文件,任何 数据数值(包括网址)都应对下表中列出的字符使用实体转义码。

字符 转义码
& 符号 & &amp;
单引号 ' &apos;
双引号 " &quot;
大于 > &gt;
小于 < &lt;

此外,所有的网址(包括您的 Sitemaps 的网址)都应编码,以便它们所在的以及网址转义的 Web 服务器识别。然而,如果您使用任何脚本、工具或日志文件来生成网址(除了手动输入之外的任何方法),通常这部分已经替您完成了。如果您提交了 Sitemaps 却收到 Google 无法找到某些网址的错误消息,请查看并确保您的网址遵循RFC-3986 URI 标准、RFC-3987IRI 标准以及 XML 标准

以下是使用非 ASCII 字符(ü)以及要求实体转义的字符(&)的网址示例:

http://www.example.com/ümlat.html&q=name

以下是 ISO-8859-1 编码的(用于使用该编码的服务器上的托管)以及网址转义过的同一网址:

http://www.example.com/%FCmlat.html&q=name

以下是 UTF-8 编码(用于使用该编码的服务器上的托管)且网址转义过的同一网址:

http://www.example.com/%C3%BCmlat.html&q=name

以下是实体转义过的同一网址:

http://www.example.com/%C3%BCmlat.html&amp;q=name

XML Sitemaps 示例

下例显示了一个 XML 格式的 Sitemaps。示例中的 Sitemaps 包含少数网址,每一个都用 <loc> XML 标记来识别。此示例中,为每个网址提供了一组不同的可选参数。

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">

   <url>
      <loc>http://www.example.com/</loc>
      <lastmod>2005-01-01</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=12&amp;desc=vacation_hawaii</loc>
      <changefreq>weekly</changefreq>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=73&amp;desc=vacation_new_zealand</loc>
      <lastmod>2004-12-23</lastmod>
      <changefreq>weekly</changefreq>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=74&amp;desc=vacation_newfoundland</loc>
      <lastmod>2004-12-23T18:00:15+00:00</lastmod>
      <priority>0.3</priority>
   </url>
   <url>
      <loc>http://www.example.com/catalog?item=83&amp;desc=vacation_usa</loc>
      <lastmod>2004-11-23</lastmod>
   </url>
</urlset>

您可以使用 gzip 压缩您的 Sitemaps 文件。压缩 Sitemaps 文件会降低对带宽的要求。请注意,未压缩的 Sitemaps 文件不得大于 10MB。

使用 Sitemaps 索引文件(对多个 Sitemaps 文件进行分组)

您可以提供多个 Sitemaps 文件,但提供的每个 Sitemaps 文件包括的网址不得超过 50,000 个,并且未压缩时不能大于 10MB (10,485,760)。这些限制条件有助于确保 Web 服务器不会因传输非常大的文件而遇到麻烦。

如果要列出超过 50,000 个网址,您需要创建多个 Sitemaps 文件。如果预计您的 Sitemaps 网址数量会超过 50,000 个或大小超过 10MB,应考虑创建多个 Sitemaps 文件。如果您的确提供了多个 Sitemaps,您可以将其列在 Sitemaps 索引文件中。Sitemaps 索引文件只能列出不超过 1,000 个 Sitemaps。

Sitemaps 索引文件的 XML 格式与 Sitemaps 文件的 XML 格式非常相似。Sitemaps 索引文件使用以下 XML 标记:

  • loc
  • lastmod
  • sitemap
  • sitemapindex

注:Sitemaps 索引文件只能指定与其位于同一网站的 Sitemaps。例如,http://www.yoursite.com/sitemap_index.xml 可包含位于 http://www.yoursite.com 的 Sitemaps,但不能包含位于 http://www.example.comhttp://yourhost.yoursite.com 的 Sitemaps。与 Sitemaps 一样,您的 Sitemaps 索引文件应为 UTF-8 编码。

XML Sitemaps 索引示例

下例展示了一个 XML 格式的 Sitemaps 索引。该 Sitemaps 索引列出了两个 Sitemaps:

<?xml version="1.0" encoding="UTF-8"?>
   <sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">
   <sitemap>
      <loc>http://www.example.com/sitemap1.xml.gz</loc>
      <lastmod>2004-10-01T18:23:17+00:00</lastmod>
   </sitemap>
   <sitemap>
      <loc>http://www.example.com/sitemap2.xml.gz</loc>
      <lastmod>2005-01-01</lastmod>
   </sitemap>
   </sitemapindex>

备注:与 XML 文件中的所有值一样,Sitemaps 网址需要实体换码.

Sitemaps 索引 XML 标记定义

  • 需要有 <loc> 标记并用其来识别 Sitemaps 的位置。

  • <lastmod> 标记是可选标记,用于指示相应 Sitemap 文件的修改时间。它并不对应于该 Sitemap 中列出的任一网页的更改时间。lastmod 标记的值应采用 W3C Datetime 格式。

    通过提供最近修改的时间戳启用搜索引擎抓取工具,抓取工具将只检索索引中的 Sitemaps 的一个子集,也就是说,抓取工具只检索某特定日期之后修改的 Sitemaps。通过这一递增的 Sitemaps 提取机制,可以快速发现超大型网站上的新网址。

  • <sitemap> 标记封装单个 Sitemaps 的相关信息。

  • <sitemapindex> 标记会压缩有关文件中的所有 Sitemaps 的信息。

Sitemaps 文件的位置 [内容]

Sitemaps 文件的位置决定该 Sitemaps 中所能包含的一组网址。位于 http://example.com/catalog/sitemap.gz 的 Sitemaps 文件可包含以 http://example.com/catalog/ 开始的任何网址,但不能包含以 http://example.com/images/ 开始的网址。

如果您有更改 http://example.org/path/sitemap.gz 的许可,您应该也可以提供以 http://example.org/path/ 作为前缀的网址的信息。http://example.com/catalog/sitemap.gz 中,被认为有效的示例网址包括:

http://example.com/catalog/show?item=23

http://example.com/catalog/show?item=233&user=3453

http://example.com/catalog/sitemap.gz 中被认为无效的网址包括:

http://example.com/image/show?item=23

http://example.com/image/show?item=233&user=3453


https://example.com/catalog/page1.html

被认定为无效的网址将不再考虑。强烈建议将 Sitemaps 放置在 Web 服务器的根目录处。例如,如果 Web 服务器位于 example.com,则 Sitemaps 索引文件应位于 http://example.com/sitemap.gz。在某些情况下,您需要针对不同的路径创建对应的 Sitemaps,例如,如果在您的组织中,安全许可对应不同目录划分上传权限。

验证您的 Sitemaps [内容]

Google 使用 XML 架构定义可以出现在 Sitemaps 文件中的元素和属性。您可从以下链接下载此架构:

对于 Sitemaps: http://www.google.com/schemas/sitemap/0.84/sitemap.xsd
对于 Sitemaps 索引文件:http://www.google.com/schemas/sitemap/0.84/siteindex.xsd

有多种工具可帮助您根据此架构来验证您的 Sitemaps 结构。在下面的每一个位置您都可以找到 XML 相关的工具列表:

http://www.w3.org/XML/Schema#Tools
http://www.xml.com/pub/a/2000/12/13/schematools.html

为了根据某个架构验证您的 Sitemaps 或 Sitemaps 索引文件,XML 文件需要有附加的标头。如果您使用的是 Sitemaps 生成器,这些标头已经包含其中。如果您使用不同的工具创建 Sitemaps,XML 文件中的标头应如下例所示。

Sitemaps:

<?xml version='1.0' encoding='UTF-8'?>
	<urlset xmlns="http://www.google.com/schemas/sitemap/0.84"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
	http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
	
	<url>
	...
	</url>
	</urlset>

Sitemaps 索引文件:

<?xml version='1.0' encoding='UTF-8'?>
	<sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
	http://www.google.com/schemas/sitemap/0.84/siteindex.xsd">
	
	<sitemap>
	...
	</sitemap>
	</sitemapindex>

 

常见问题解答 [内容]
 

问题:我如何在 Sitemaps 中表示网址?

对于所有 XML 文件,任何数据数值(包括网址)都应使用以下字符实体转义码:& 符号 (&)、单引号 (')、双引号 (")、小于 (<) 和大于 (>)。还应确保所有网址遵循 RFC-3986 URI 标准、RFC-3987 IRI 标准以及 XML 标准。如果您要使用脚本来生成网址,通常可以使用网址转义的方式将其转义为该脚本的一部分。并且您仍然需要对它们进行实体转义。例如,以下 Python 脚本实体转义 http://www.example.com/view?widget=3&count>2

$ python
	Python 2.2.2 (#1, Feb 24 2003, 19:13:11)  
	>>> import xml.sax.saxutils
	>>> xml.sax.saxutils.escape("http://www.example.com/view?widget=3&count>2")

以上示例所得网址为:

http://www.example.com/view?widget=3&amp;count&gt;2

问题:使用哪种字符编码方法生成 Sitemaps 文件有关系吗?

是的。您的 Sitemaps 文件应该使用 UTF-8 编码。

问题:如何指定时间?

对此协议中的 lastmod 时间戳以及所有其他日期和时间,请使用 W3C Datetime 编码。例如,2004-09-22T14:12:14+00:00

此编码允许您省去 ISO8601 格式的时间部分,例如:2004-09-22 也是有效的。然而,如果您的网站频繁更改,则鼓励您使用时间部分,以便抓取工具可获取关于您网站的更全面的信息。

问题:如何计算 lastmod 日期?

对于静态文件,这是实际的文件更新日期。可以使用 UNIX 日期命令获取此日期:

$ date --iso-8601=seconds -u -r /home/foo/www/bar.html
	>> 2004-10-26T08:56:39+00:00

对于许多动态网址,您可以根据基本数据的更改时间或使用一些基于定期更新(如果可行的话)的近似值轻松地计算 lastmod 日期。使用一个近似日期或时间戳就可以帮助抓取工具避免抓取还未更改的网址。这将降低 Web 服务器的带宽和 CPU 要求。

问题:我将 Sitemaps 放在哪里?

强烈建议将 Sitemaps 放置在 HTML 服务器的根目录中,即,将其放置在 http://example.com/sitemap.xml.gz

在某些情况下,您或许会希望在网站上针对不同的路径创建对应的 Sitemaps — 例如,如果在您的组织中,安全许可对应不同目录划分上传权限。

我们认为如果您有上传 http://example.com/path/sitemap.xml.gz 的许可,那么您也可以通过 http://example.com/path/ 报告元数据。

问题:我的 Sitemaps 可以有多大?

Sitemaps 在压缩时不应超过 10MB(10,485,760 字节),且最多可以包含 50,000 个网址。也就是说,如果您的网站包含的网址超过 50,000 个或 Sitemaps 大于 10MB,您需要创建多个 Sitemaps 文件,并使用 Sitemaps 索引文件。即使您的网站较小,但计划的网址数量超出 50,000 个或文件大小超过 10MB,也应使用 Sitemaps 索引文件。

问题:我的网站拥有数千万个网址;我可以采用某种方式只提交最近更改过的网址吗?

您可以在少数频繁更改的 Sitemaps 中列出已更新的网址,然后使用 Sitemaps 索引文件中的 lastmod 标记验证这些 Sitemaps 文件。随后,搜索引擎即可逐步抓取(只抓取)这些已更改的 Sitemaps。

问题:创建 Sitemaps 后会发生什么?

在创建 Sitemaps 后,您需要通知搜索引擎 Sitemaps 的位置。得到通知的搜索引擎就可以检索您的 Sitemaps 并使网址可以由抓取工具抓取。

问题:需要完整地指定 Sitemaps 中的网址吗?

是的。您需要在网址中提供协议(例如,http)。如果 Web 服务器有要求,您还需要提供尾随斜线。例如,http://www.google.com/ 是有效的 Sitemaps 网址,而 www.google.com 则不是。

问题:我的网站有“http”和“https”两个网址版本。需要把它们都列出来吗?

否。请在您的 Sitemaps 中只列出一种版本的网址。包含多个版本的网址可能导致抓取工具无法完整抓取您的网站。

问题:我网站上的网址中包含会话 ID 号。需要将其删除吗?

是的。网址中包含会话 ID 号可能导致网站抓取不完整以及重复抓取。

问题:Sitemaps 中网址的位置是否会影响它的使用?

否。网址在 Sitemaps 中的位置不会影响搜索引擎对它的使用或识别方式。

问题:我们网站上的一些网页使用框架。我们应该提供框架组网址或框架内容的网址吗?

请将两种网址都包括进来。

问题:可以压缩 Sitemaps 吗?或者需要以 gzip 压缩吗?

请使用 gzip 压缩您的 Sitemaps。

问题:XML Sitemaps 中的“priority”提示会改变我的网页在搜索结果中的排名码?

否。Sitemaps 中的“priority”提示只表示在您网站上,某一特定网址与其他网址的相对重要性。

问题:有可以用作 XML Sitemaps 验证依据的 XML 架构吗?

位于 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd 上的 XML 构架适用于 Sitemaps 文件,在 http://www.google.com/schemas/sitemap/0.84/siteindex.xsd 上可以找到对应 Sitemaps 索引文件的构架。

抱歉!评论已关闭.