站点地图(Sitemap)文件,用于说明你的网站中有哪些资源(网页、视频、图片等)可被访问、这些资源的相关信息(更新时间、重定向、移动端适配等)、以及这些资源之间的相互关系。 站点地图文件支持多种格式,例如:XMLRSSTXTHTML等。举例的这四种格式目前Google都支持,Baidu只支持XMLTXT

站点地图简单来说就是向搜索引擎提供了一份网站说明,用于提高SEO。但是如果你的网站规模较小(少于 100 个网页),且你的网页可以从首页开始通过一个或多个链接访问到,其实不需要额外配置站点地图文件,搜索引擎会比较好的搜索出你网站的结构。

本文只介绍XML格式。为了简便,下文中用「sitemap文件」指代「站点地图文件」。

简介

先放一个简单的示例:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="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格式的sitemap文件,有以下三种必选标签:

以上示例中,第一行为XML文件声明,其余标签为站点地图的规范标签,定义在 http://www.sitemaps.org/schemas/sitemap/0.9命名空间下。除了以上说明的三个必选标签外,其余标签都是可选标签。可选标签的支持情况依赖每个搜索引擎自身的实现,例如Google不支持changefreq<priority>

另外需额外注意的地方:

标签元素定义

实体转义

sitemap文件必须使用UTF-8格式保存。以及所有标签内容都需要对下列字符进行转义:

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

除此之外,需确保<loc>中的网址经过URL编码,以及符合RFC-3986(URI)规范、XML规范(对于IRIs符合RFC-3987)。

下面是一个采用非ASCII字符(ü)和需要进行实体转义的字符(&)的网址示例:

经过编码和转义后的同一网址:

站点地图文件示例

下面是一个包含多个<url>以及不同可选标签的sitemap文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="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 index files)

每个sitemap文件最多可包含50,000个<url>,且文件大小最多50MB(Baidu是10M)。文件传输时一般会用gzip等方式进行压缩,传输完成及解压后文件大小必须在50M(或10M)以内。

如果你的sitemap文件过大,或者希望对站点地图进行分组,可以创建一个站点地图索引文件,然后在站点地图索引文件中引用sitemap文件。同样的,站点地图索引文件中最多可引用50,000个sitemap文件,文件大小最多50M(Baidu 10M),以及使用UTF-8编码格式。

下面用「index文件」替代「站点地图索引文件」。

index文件包含以下标签:

类似sitemap文件,index文件里的每个<sitemap>都必须和index文件保持同一域名和目录。
例如http://www.yoursite.com/sitemap_index.xml中可包含http://www.yoursite.com下的sitemap文件,但是不能包含http://yourhost.yoursite.com下的sitemap文件。

站点地图索引文件示例

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="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>

站点地图文件路径

sitemap文件中的<url>都必须和sitemap文件在同一目录。例如,如果一个sitemap文件位于http://example.com/catalog/sitemap.xml,则该文件中可以包含以下资源:

但是不能包含以下资源:

即,一个sitemap文件中只能包含同协议、同域名、同目录下的资源。所以一般把sitemap文件存放在网站的根目录下。对于不符合规范的链接,搜索引擎会忽略跳过。

跨域名

但是,有时候我们希望把所有sitemap文件都保存在同一台主机下,例如:

sub1.xml文件中引用的都是sub1.host.com下的资源。但是因为sub1.xml位于sitemap.host.com下,不符合前面介绍的规范,所以搜索引擎会忽略。如果我们主动向搜索引擎提交该sitemap文件的话,搜索引擎还会返回错误。

此时,我们需要在http://sub1.host.com/robots.txt中增加额外的配置,用于将sub1.host.com下的sitemap文件指向其他链接,如下:

User-agent: *

# 将该内容插入robots.txt任意一行即可
Sitemap: http://sitemap.host.com/sub1.xml

另外要注意,此时sub1.xml虽然位于sitemap.host.com,但其实代表的是sub1.host.com的站点地图, 所以sub1.xml文件中只能包含sub1.hsot.com下的资源。

通知搜索引擎

一般通用的有以下三种方式:

  1. 在搜索引擎的相关后台设置sitemap文件地址,搜索引擎会定期检查。
  2. 类似上面介绍的跨域名情况,在robots.txt中显示声明sitemap文件地址。搜索引擎在下次访问网站robots.txt时候发现有sitemap文件会进行收录。
  3. 搜索引擎会提供相关API接口,每次网站更新,就调用接口通知搜索引擎有更新。这个方式是相对最有效的。

另外还需注意一点,通过观察web服务器日志可以发现,即便搜索引擎请求了最新的sitemap文件,在搜索引擎的搜索结果上可能还是没有显示出我们新增的页面或者修改后的页面。这里要明确一点,我们只是提供了一份网站说明,搜索引擎获取到这份说明后具体会怎么处理由搜索引擎自身决定的。

Baidu搜索

Baidu搜索引擎在以上规范的基础上,有一些修改:

mobile:mobile标签

Baidu的<mobile:mobile>是对标准sitemap协议的扩展,命名空间为:http://www.baidu.com/schemas/sitemap-mobile/1/,有以下四种取值:

示例:

<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
        xmlns:mobile="http://www.baidu.com/schemas/sitemap-mobile/1/">
    <url>
        <loc>http://m.example.com/index.html</loc>
        <mobile:mobile type="mobile"/>
        <lastmod>2009-12-14</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>http://www.example.com/index.html</loc>
        <lastmod>2009-12-14</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>http://www.example.com/autoadapt.html</loc>
        <mobile:mobile type="pc,mobile"/>
        <lastmod>2009-12-14</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
    <url>
        <loc>http://www.example.com/htmladapt.html</loc>
        <mobile:mobile type="htmladapt"/>
        <lastmod>2009-12-14</lastmod>
        <changefreq>daily</changefreq>
        <priority>0.8</priority>
    </url>
</urlset>

参考链接

示例文件