很早以前一直觉得站点地图可有可无,反正搜索引擎爬虫都会自己去爬站内各种连接。但是对于一个新站或经常更新的站点来说,站点地图很重要性,是快速告诉搜索引擎站内有哪些内容或更新了哪些内容。并且还能针对不同以页面配置优先级等。
站点地图通常在 robots.txt
文件中声明,具体可看之前的文章(一文搞懂SEO优化之站点robots.txt)
比较常见是 xml类型站点地图,还有RSS、mRSS 、Atom 1.0(与xml类型类似)以及文本类型站点地图。本篇主要说一说xml格式中如何实现。
因为站点地图是描述网站中都有哪些页面,不同体量的网站网页数差别很多,大型网站可能上万或几十万个网页,小型网站可能就几十个网页。如果都放到站点地图文件里会使文件太大读取困难,并且搜索引擎爬虫通常也会对站点地图大小有要求,比如谷歌就要求站点地图不能大于50M,且不超过5万个站点,那其余网站怎么办?
例如:https://ai-bar.com/sitemap.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://ai-bar.cn/tools</loc>
</url>
<url>
<loc>https://ai-bar.cn/tools/wechat-editor</loc>
<lastmod>2025-06-04</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://ai-bar.cn/news</loc>
<lastmod>2025-06-04</lastmod>
</url>
</urlset>
整个站点地图信息都是通过 urlset
标签包裹,内部每一个网站链接都是通过 url
标签定义,其中 loc
是必须要有的,lastmod
、changefreq
和 priority
为非必须的。
urlset
站点地图外层容器标签,照抄即可。url
定义站点链接信息的父标签loc
必须有,定义具体链接,必须包含域名的绝对地址,如 https://ai-bar.cn/tools
,不能是相对地址如 /tools
lastmod
可选,最新修改时间,可是 2025-06-06
,也可以是 2025-06-06T18:00:12+00:00
changefreq
可选,定义页面更新频率,可选值有 always
、hourly
、daily
、weekly
、monthly
、yearly
、never
,其中 always
为每次访问网页都会变化,never
存档不更新。尽管这么规定了,实际上搜索引擎爬虫并不完全根据这里的规定来抓取。priority
可选,定义页面优先级,从 0.0
到 1.0
,这个标签的定义不会影响页面在搜索中的排名,只会影响在本站中的重要性。注意
这里设置的值是相对的,如果所有页面都设置的很高,实际上搜索引擎会认为没有重要性或重要性一样,所以应根据实际情况定义。我自己在生成站点地图的时候会根据网页的目录层级来动态生成优先级,每多一个层级就减少0.2,一般来说页面的目录层级不超过3层最好。
详细规范可以看这里:https://www.sitemaps.org/protocol.html
前面介绍的是页面较少的小型网站的站点地图,对于页面较多的大型网站有所不同。
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://test.com/sitemap1.xml</loc>
<lastmod>2025-06-05</lastmod>
</sitemap>
<sitemap>
<loc>https://test.com/sitemap2.xml</loc>
</sitemap>
</sitemapindex>
这个站点地图其实是管理子站点的索引文件,普通站点的 urlset
标签被替换为了 sitemapindex
,url
标签被替换为了 sitemap
,其余的没有什么变化。不过仔细观察可以发现,loc
中定义的不是单个网址,而是xml
的普通站点地图。
站点地图为:https://www.douban.com/sitemap_index.xml
,可以发现大约定义了 1万 个 <sitemap>
,每一个 <sitemap>
定义了 gzip
压缩的xml普通站点地图。
<?xml version="1.0" encoding="utf-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.douban.com/sitemap.xml.gz</loc>
<lastmod>2025-05-31T20:22:12Z</lastmod>
</sitemap>
<!-- 其他... -->
<sitemap>
<loc>https://www.douban.com/sitemap9985.xml.gz</loc>
<lastmod>2025-05-31T20:22:12Z</lastmod>
</sitemap>
</sitemapindex>
随机下载一个发现就是前面介绍的普通网站的站点地图。
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://movie.douban.com/celebrity/1524905/movies</loc>
<priority>0.7</priority>
<changefreq>weekly</changefreq>
</url>
<!-- 其他行... -->
</urlset>
不看不知道,一看真是惊呆了,每一个站点地图也包含了巨量的网页,随机下载了几个测试,每个几乎都有 7万个 左右的链接定义,当然也有少一些的。这么粗算下来:1万个站点地图 * 7万个链接
,豆瓣岂不是有7亿个页面!!
好了今天就研究这么多。由此可见,大型网站(尤其C端)并不是这么容易维护,就站点地图的生成、不同子站或模块如何维护更新频率,还有更新时间等就需要统一平台来管理。