robots 中 Sitemap 的 XML 格式 和 用法

greatking 2011-02-14

此文档介绍适用于Sitemap协议的XML架构。

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

Sitemap必须:

*以<urlset>开始标记作为开始,以</urlset>结束标记作为结束。

*在<urlset>标记中指定命名空间(协议标准)。

*每个网址包含一个<url>条目作为XML父标记。

*在每个<url>父标记中包含一个<loc>子标记条目。

其他所有标记均为可选,搜索引擎不同,对可选标记的支持也各不相同。有关详情,请参阅各个搜索引擎的文档。

而且,Sitemap中的所有网址都必须来自于同一个主机,如www.example.com或store.example.com。有关详细信息,请参阅Sitemap文件位置。

XMLSitemap示例

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

<?xmlversion="1.0"encoding="UTF-8"?>

<urlsetxmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<url>

<loc>http://www.example.com/</loc>

<lastmod>2005-01-01</lastmod>

<changefreq>monthly</changefreq>

<priority>0.8</priority>

</url>

</urlset>

另请查看具有多个网址的示例。

XML标记定义

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

属性说明

<urlset>必填

压缩此文件并提供当前协议标准作为参考。

<url>必填

每个网址条目的父标记。剩余标记为此标记的子标记。

<loc>必填

该页的网址。如果您的网络服务器需要网址的话,此网址应以协议开始(例如:http)并以斜杠结尾。该值必须少于2,048个字符。

<lastmod>可选

该文件上次修改的日期。此日期应采用W3CDatetime格式。如果需要,此格式允许省略时间部分,并使用YYYY-MM-DD。

请注意,此标记不同于服务器可返回的If-Modified-Since(304)标头,搜索引擎可能会以不同的方式使用这两个来源的信息。

<changefreq>可选

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

*always

*hourly

*daily

*weekly

*mothly

*yearly

*never

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

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

<priority>可选

此网址的优先级是相对于您网站上其他网址的优先级而言的。有效值范围从0.0到1.0。该值不会影响您的网页与其他网站上网页的比较结果,而只是告知搜索引擎您认为哪些网页对抓取工具来说最为重要。

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

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

另请注意,为网站中的所有网址都指定高优先级并不会带来什么好处。因为优先级是相对的,只用于在您网站的网址之间进行选择。

返回页首

实体转义

Sitemap文件必须以UTF-8编码(通常在保存文件时可以这么做)。对于所有的XML文件,任何数据数值(包括网址)都应对下表中列出的字符使用实体转义码。

字符转义码

&符号&&amp;

单引号'&apos;

双引号"&quot;

大于>&gt;

小于<&lt;

此外,所有网址(包括Sitemap的网址)都必须经过网址转义并编码,以便它们所在网络服务器可以进行读取。不过,如果您使用任何类型的脚本、工具或日志文件来生成网址(除手动输入之外的任何方法),通常系统已经替您完成了这部分工作。请仔细检查,确保网址符合RFC-3986URI标准、RFC-3987IRI标准,以及XML标准。

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

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

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

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

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

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

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

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

XMLSitemap示例

下例显示了一个XML格式的Sitemap。示例中的Sitemap包含少量的网址,每个网址都使用不同的一组可选参数。

<?xmlversion="1.0"encoding="UTF-8"?>

<urlsetxmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<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>

返回页首

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

您可以提供多个Sitemap文件,但每个Sitemap文件包含的网址不得超过50,000个,并且文件不得超过10MB(10,485,760字节)。如果您愿意,可以使用gzip压缩Sitemap文件,以减少带宽要求;但是解压缩后的Sitemap文件不得超过10MB。如果要列出50,000个以上的网址,您需要创建多个Sitemap文件。

如果您确实提供多个Sitemap,则应当在Sitemap索引文件中列出每个Sitemap文件。Sitemap索引文件中最多可列出50,000个Sitemap,文件不得超过10MB(10,485,760字节),并且是可以压缩的。您可以具有多个Sitemap索引文件。Sitemap索引文件的XML格式与Sitemap文件的XML格式非常相似。

Sitemap索引文件必须:

*以<sitemapindex>开始标记作为开始,以</sitemapindex>结束标记作为结束。

*每个Sitemap包含一个<sitemap>条目作为XML父标记。

*每个<sitemap>父标记包含一个<loc>子标记条目。

可选的<lastmod>标记同样适用于Sitemap索引文件。

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

XMLSitemap索引示例

下例显示包含两个Sitemap的Sitemap索引文件:

<?xmlversion="1.0"encoding="UTF-8"?>

<sitemapindexxmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<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文件中的所有值一样,Sitemap网址必须经过实体转义。

Sitemap索引XML标记定义

属性说明

<sitemapindex>必填压缩文件中所有Sitemap的相关信息。

<sitemap>必填压缩个别Sitemap的相关信息。

<loc>必填

识别Sitemap的位置。

此位置可以为Sitemap、Atom文件、RSS文件或简单的文本文件。

<lastmod>可选

识别相对Sitemap文件的修改时间。它与该Sitemap中列出的任一网页的更改时间不相符。lastmod标记的值应采用W3C日期时间格式。

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

返回页首

其他Sitemap格式

Sitemap协议可让您向搜索引擎提供有关您网页的详细信息,而且我们也建议您使用该协议,因为除网址之外,您还可以提供更多网页信息。不过,除了XML协议,我们还支持RSS供稿和文本文件,这两者所能提供的信息比较有限。

联合供稿

您可以提供RSS(真正简单联合供稿系统)2.0、Atom0.3或1.0供稿。通常,只有您的网站已有联合供稿时才能使用此格式。请注意,此方法可能无法让搜索引擎了解您网站中的所有网址,因为供稿可能只提供最近访问的网址的信息,但搜索引擎仍然可在正常抓取过程中使用该信息通过跟踪供稿中的网页内部链接找到您网站的其他网页。请确保该供稿位于您希望搜索引擎抓取的最高一级目录。搜索引擎从供稿中抽取的信息如下:

*<link>字段–表示网址

*修改日期字段(RSS供稿源的<pubDate>字段和Atom供稿源的<modified>日期)–表示每个网址上次修改的时间。可以根据需要使用修改日期字段。

文本文件

您可以提供纯文本文件,其中每行包含一个网址。此文本文件需要遵循以下指南:

*文本文件每行都必须有一个网址。网址中不能有换行。

*您必须指定完整的网址,包括http。

*每个文本文件最多可包含50,000个网址,并且不得超过10MB(10,485,760字节)。如果网站所包含的网址超过50,000个,则可以将列表分割成多个文本文件,然后分别添加每个文件。

*文本文件需使用UTF-8编码。在保存文件时您可指明此项(例如,在记事本中,此项会在“另存为”对话框中的编码菜单中列出)。

*文本文件不应包含网址列表以外的任何信息。

*此文本文件不应包含任何标题或注脚信息。

*如果愿意,您可以使用gzip压缩Sitemap文本文件,以减少带宽要求。

*您可以随意为此文本文件命名。请检查并确保您的网址符合RFC-3986标准中的URI规定和RFC-3987标准中的IRI规定。

*您应该将文本文件上传至您希望搜索引擎抓取的最高级别的目录,并确保在文本文件中未列出位于更高级别目录的网址。

文本文件的示例条目如下所示。

http://www.example.com/catalog?item=1

http://www.example.com/catalog?item=11

返回页首

Sitemap文件位置

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

如果您有更改http://example.org/path/sitemap.xml的权限,那么应该也可以提供前缀为http://example.org/path/的网址信息。在http://example.com/catalog/sitemap.xml中,视为有效的网址示例包括:

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

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

http://example.com/catalog/sitemap.xml中无效的网址包括:

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

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

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

注意,这表示Sitemap中列出的所有网址都必须使用相同的协议(在本例中为http)并位于在Sitemap所在的主机上。例如,如果Sitemap位于http://www.example.com/sitemap.xml,则不能包含http://subdomain.example.com上的网址。

被认定为无效的网址将不再作进一步考虑。强烈建议将Sitemap放在网络服务器的根目录处。例如,如果网络服务器位于example.com,则Sitemap索引文件应位于http://example.com/sitemap.xml。在某些情况下,您需要针对不同的路径创建不同的Sitemap,例如,当您公司的安全许可对应不同的目录划分写入权限时。

如果您使用带端口号的路径提交Sitemap,那么Sitemap文件中列出的每个网址中都应包含该端口号,作为路径的一部分。例如,如果Sitemap位于http://www.example.com:100/sitemap.xml,那么Sitemap中列出的每个网址必须以http://www.example.com:100开头。

Sitemap&交叉提交

若要从一个主机为多个主机提交Sitemap,对于要在Sitemap中提交网址的这些主机,需要证明您具有其所有权。请看下面的示例。我们假定您要为3个主机提交Sitemap:

www.host1.com,Sitemap文件sitemap-host1.xml

www.host2.com,Sitemap文件filesitemap-host2.xml

www.host3.com,Sitemap文件filesitemap-host3.xml

而且,您想将三个Sitemap全部放在一个主机上:www.sitemaphost.com。因此,Sitemap的网址将是:

http://www.sitemaphost.com/sitemap-host1.xml

http://www.sitemaphost.com/sitemap-host2.xml

http://www.sitemaphost.com/sitemap-host3.xml

默认情况下,这样会出现“交叉提交”的错误,因为您在试图使用www.sitemaphost.com上存放的Sitemap提交www.host1.com的网址(另外两个主机情况相同)。避免此错误的方法之一是证明您具有www.host1.com的所有权(即有权修改文件)。另一种方法是在www.host1.com上修改robots.txt文件,使其指向www.sitemaphost.com中的Sitemap。

在此示例中,http://www.host1.com/robots.txt中的robots.txt文件应包含一行“Sitemap:http://www.sitemaphost.com/sitemap-host1.xml”。通过修改www.host1.com上的robots.txt文件,并将其指向www.sitemaphost.com中的Sitemap,可间接证明您具有www.host1.com的所有权。换言之,管理www.host1.com上robots.txt文件的人认为http://www.sitemaphost.com/sitemap-host1.xml上的Sitemap中包含www.host1.com的网址。对于其他两台主机,可以重复相同的步骤。

现在您可以在www.sitemaphost.com上提交Sitemap了。

当某主机的robots.txt(即http://www.host1.com/robots.txt)指向另一主机上的Sitemap或Sitemap索引时;对于每个目标Sitemap(如http://www.sitemaphost.com/sitemap-host1.xml),其中的所有网址均属于指向该Sitemap的主机。原因如上所述,Sitemap中的网址只能来自于同一个主机。

返回页首

验证您的Sitemap

下列XML架构定义可以出现在Sitemap文件中的元素和属性。可从以下链接下载此架构:

对于Sitemap:http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd

对于Sitemap索引文件:http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd

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

http://www.w3.org/XML/Schema#Tools

http://www.xml.com/pub/a/2000/12/13/schematools.html

要针对某个架构验证Sitemap或Sitemap索引文件,XML文件需要附加标头,如下所示。

Sitemap:

<?xmlversion='1.0'encoding='UTF-8'?>

<urlsetxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"

xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<url>

...

</url>

</urlset>

Sitemap索引文件:

<?xmlversion='1.0'encoding='UTF-8'?>

<sitemapindexxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd"

xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">

<sitemap>

...

</sitemap>

</sitemapindex>

返回页首

扩展Sitemap协议

您可以使用自己的命名空间来扩展Sitemap协议。只需在根元素指定此命名空间即可。例如:

<?xmlversion='1.0'encoding='UTF-8'?>

<urlsetxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"

xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"

xmlns:example="http://www.example.com/schemas/example_schema"><!--namespaceextension-->

<url>

<example:example_tag>

...

</example:example_tag>

...

</url>

</urlset>

返回页首

通知搜索引擎抓取工具

创建Sitemap文件并将其放在网络服务器上之后,您需要将该Sitemap的位置告知支持此协议的搜索引擎。为此,请按以下步骤操作:

*通过搜索引擎的提交界面提交

*在网站robots.txt文件中指定位置

*发送HTTP请求

然后,搜索引擎就可以检索您的Sitemap并将网址提供给抓取工具抓取。

通过搜索引擎的提交界面提交Sitemap

要直接将Sitemap提交到搜索引擎以便接受状态信息与任何处理错误,请参阅每个搜索引擎的文档。

在robots.txt文件中指定Sitemap的位置。

您可以使用robots.txt文件指定Sitemap的位置。为此,只需添加下列行:

Sitemap:http://www.example.com/sitemap.xml

此指令不受user-agent行的影响,因此可放在文件中的任意位置。如果您有Sitemap索引文件,可在其中加入该文件的位置。您不必在索引文件中列出每个单独的Sitemap。

在每个robots.txt文件中可以指定多个Sitemap文件。

Sitemap:http://www.example.com/sitemap-host1.xml

Sitemap:http://www.example.com/sitemap-host2.xml

通过HTTP请求提交Sitemap

要使用HTTP请求提交Sitemap(使用搜索引擎提供的网址替换<searchengine_URL>),请将请求发送到下列网址:

<searchengine_URL>/ping?sitemap=sitemap_url

例如,如果Sitemap位于http://www.example.com/sitemap.gz,则网址将变为:

<searchengine_URL>/ping?sitemap=http://www.example.com/sitemap.gz

网址编码/ping?sitemap=:之后的所有内容

<searchengine_URL>/ping?sitemap=http%3A%2F%2Fwww.yoursite.com%2Fsitemap.gz

您可以使用wget、curl或其他您选择的机制发出HTTP请求。请求成功的话会返回HTTP200回应代码;如果收到其他回应,则应重新提交请求。HTTP200回应代码仅表示搜索引擎已收到您的Sitemap,并不表示Sitemap本身或其中包含的网址有效。完成此操作的简单方法是设置自动执行的任务,定期生成并提交Sitemap。

注意:如果要提供Sitemap索引文件,则只需发出一个包含Sitemap索引文件位置的HTTP请求即可,而无须为索引中列出的每个Sitemap发出单独的请求。

相关推荐