个人站长把网站做上线之后,最关心的就是"什么时候能被百度、必应收录"。很多站长以为网站一上线,搜索引擎就会自动发现所有页面,其实爬虫发现新页面的途径主要有两条:一是顺着网站上的链接(内链和外链)一级一级地爬,二是读取网站地图 Sitemap 文件。Sitemap 就是一份"目录",把站点里所有需要收录的页面地址、更新时间、重要程度列出来,告诉搜索引擎"我这里有哪些页面,分别在什么时候更新过"。这篇文章从协议格式讲起,到动态生成、提交平台、常见坑排查,把 Sitemap 一次讲透。
一、Sitemap 协议基础
Sitemap 由 sitemaps.org 协议定义,本质上是一个 XML 文件。根节点是 urlset,里面每个 url 节点描述一个页面。url 节点常用的子节点有四个:loc 是页面的完整 URL,必须带协议和域名,比如 https://www.zz1984.com/example.html,这是唯一必填的字段;lastmod 是页面最后修改时间,按标准格式写,比如 2026-08-22;changefreq 是内容更新频率的提示,取值有 always、hourly、daily、weekly、monthly、yearly、never;priority 是页面重要程度,取值从 0.0 到 1.0,比如首页 1.0、栏目页 0.8、文章页 0.6。需要提醒的是,changefreq 和 priority 只是给搜索引擎的"建议"而不是指令,搜索引擎不一定会照做,所以不要花太多精力纠结这两个值的精确程度,loc 和 lastmod 才是真正有用的字段。
一个最简的 Sitemap 长这样:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url><loc>https://www.zz1984.com/</loc><lastmod>2026-08-22</lastmod></url>
<url><loc>https://www.zz1984.com/about.html</loc><lastmod>2026-08-01</lastmod></url>
</urlset>注意 XML 声明里 encoding 必须是 UTF-8,文件保存时也必须是 UTF-8 编码,否则一旦包含中文内容就会乱码,搜索引擎直接解析失败。
二、Sitemap 索引与扩展类型
单个 Sitemap 文件有硬性上限:最多五万条 URL,压缩前文件大小不能超过 50MB。个人博客基本达不到这个量级,但如果你做的是数据量比较大的站(比如收录了上万条数据的查询类站点),就要把 Sitemap 拆成多个文件,再用一个 Sitemap 索引文件统一引用。索引文件的根节点是 sitemapindex,里面每个 sitemap 节点用 loc 指向子 Sitemap 文件的地址,子文件地址本身也必须是完整的 URL。另外,图片较多的站可以在 url 节点里加 image 扩展声明图片地址,视频内容可以加 video 扩展,新闻站可以用 news 扩展。这些扩展信息能帮助对应类型的搜索结果展示得更丰富,比如图片有机会进入百度图片搜索、视频进入视频搜索。个人博客如果图片多,给 Sitemap 加上 image 节点是成本极低、收益明确的做法。
三、用脚本动态生成 Sitemap
博客内容在不断增加,手工维护 Sitemap 文件不现实,正确做法是用脚本从数据库动态生成。以 Typecho 为例,文章存在数据库的 contents 表里,只需要把已发布文章查出来,按协议拼成 XML 再输出成文件即可。用 PHP 写生成脚本的思路:查询 status 为 publish、type 为 post 的文章,取出每篇的标题、链接、修改时间,拼成 url 节点;栏目页和独立页面也可以一并加进去。输出前把文件写到网站根目录的 sitemap.xml,或者让脚本直接响应 /sitemap.xml 这个 URL 动态返回,再用 cron 定时执行。更新频率建议一天一次,放在凌晨流量低的时候跑,避免生成过程影响正常访问。
四、声明与提交:robots.txt 加站长平台
Sitemap 生成之后要做两件事。第一是在 robots.txt 里声明,格式是在文件末尾加一行:Sitemap: https://www.zz1984.com/sitemap.xml。这样任何遵守协议的搜索引擎爬虫抓取 robots.txt 时都会看到这个地址。第二是主动提交到各大平台:百度在百度搜索资源平台的"普通收录"里找到 sitemap 提交入口填地址;必应提交到 Bing Webmaster Tools;谷歌在 Search Console 里提交。平台一般要求填完整 URL。除了 Sitemap,百度还支持主动推送(API 推送)和手动提交两种方式,主动推送是把新发布的 URL 即时 POST 给百度接口,适合更新频繁的站,收录速度比等爬虫来抓 Sitemap 快很多。建议的做法是:文章发布当天用主动推送接口推一次,同时每天用 cron 更新 Sitemap 兜底,双保险。
五、常见坑与排查清单
第一,loc 里必须写完整绝对地址,少了协议或域名,搜索引擎可能直接忽略整个文件。第二,文件必须 UTF-8 编码,用编辑器"另存为 ANSI"是经典错误,会导致解析失败。第三,不要把草稿、已删除页面放进 Sitemap,里面的地址必须是能正常访问的,否则会被判定为垃圾页面。第四,robots.txt 里 Disallow 的地址即使放进 Sitemap 也不会被收录,反而浪费抓取配额。第五,lastmod 不要乱写,写未来时间或者频繁抖动会让搜索引擎怀疑站点可信度,建议只在内容真正变化时更新。第六,提交前先验证:用浏览器直接打开 sitemap.xml,看能否正常显示 XML 树;再用站长平台或第三方工具检查格式有没有报错。另外要明确预期:Sitemap 只解决"发现"问题,不解决"收录"问题。最终能否收录取决于内容质量、站点权重和抓取配额,Sitemap 做得再完美,内容不行一样收不进去。它是 SEO 的基础设施,不是灵丹妙药。
六、主动推送:比 Sitemap 更快的收录方式
Sitemap 是"被动等待爬虫来抓",主动推送则是"主动告诉搜索引擎我有新页面"。百度的搜索资源平台提供 API 推送接口:把新发布页面的 URL 列表 POST 到指定接口,接口会即时返回成功和失败的数量。对个人博客来说,每次发布文章后推送一次即可。推送的 URL 必须是可以正常访问的绝对地址,且内容要真实,频繁推送空页面或者重复内容会被判定为作弊,反而影响站点信誉。除了 API 推送,百度还有 sitemap 提交和手动提交两种方式,三者互不冲突,可以叠加使用。谷歌和必应没有即时推送接口,但支持 ping 通知(告诉搜索引擎 sitemap 文件更新了),对个人站的更新频率来说已经足够。
推送有一个容易忽略的细节:URL 一定要规范化。同一个页面用 http 还是 https、带不带 www、结尾带不带斜杠,全站要固定成一种写法,避免同一页面被当成多个地址抓取,既浪费抓取配额又分散权重。网站改版的时候(比如从 http 换到 https),记得同步更新 sitemap 里的全部地址,并在站长平台提交改版声明或者做好 301 跳转,否则旧地址的收录权重会白白流失。
最后说说 sitemap 在整体 SEO 里的位置:它解决的是"发现效率",内链解决的是"权重传递",内容质量决定"能不能被收录",三者缺一不可。很多站长把 sitemap 当成万能药,更新频繁但内容空洞,收录依然没有起色;反过来,内容优质但从不提交 sitemap 的站,靠内链和外链也能慢慢被爬全。对草根站长来说,正确姿势是:保证每个页面有稳定的内链入口,发布新文章当天推送一次,sitemap 每天自动更新兜底,然后安心把时间花在写内容上。
总结一下:Sitemap 是每个站长都应该配置的 SEO 基础项,成本低、收益明确。核心动作就三步——用脚本从数据库动态生成、在 robots.txt 里声明、到百度必应谷歌的站长平台提交。配合主动推送和稳定的更新频率,新文章被收录的速度会有肉眼可见的提升。配置好之后每个季度检查一次文件有没有报错就够了,剩下的精力应该花在内容本身。