什么是站点地图,为什么要提交给谷歌
站点地图(Sitemap)是一个列出你网站所有页面的XML文件,相当于给谷歌爬虫一份"网站目录"。虽然谷歌爬虫也能通过链接自然发现你的页面,但提交站点地图有三个好处:加快新页面收录、确保深层页面不被遗漏、通过lastmod标签告诉谷歌哪些页面有更新。
Google Search Console(GSC)是提交站点地图的唯一官方渠道。验证网站所有权后,你就能在GSC中提交sitemap并查看抓取状态。
本文适合刚接触Google Search Console、站点地图提交后显示"无法抓取"或"未知"类型、想搞清楚谷歌到底怎么识别sitemap的站长。所有命令和配置都基于实际操作验证。
站点地图的XML格式标准
谷歌只识别符合 sitemaps.org 协议的XML文件。格式不对,谷歌直接报"无法抓取"。
基础格式(单文件URL列表)
网站页面不多时(5万条以内),用这种最简单的 <urlset> 格式:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://www.example.com/</loc>
<lastmod>2026-10-07T08:00:00+08:00</lastmod>
</url>
<url>
<loc>https://www.example.com/post-1.html</loc>
<lastmod>2026-10-06T12:00:00+08:00</lastmod>
</url>
</urlset>
索引格式(URL数量大时用)
当页面超过5万条,单个文件装不下,就要用 <sitemapindex> 索引文件,里面引用多个子地图:
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://www.example.com/post-sitemap.xml</loc>
<lastmod>2026-10-07T06:33:18+00:00</lastmod>
</sitemap>
<sitemap>
<loc>https://www.example.com/page-sitemap.xml</loc>
<lastmod>2026-10-06T01:42:44+00:00</lastmod>
</sitemap>
</sitemapindex>
关键格式要求
| 要求 | 说明 |
|---|---|
| XML声明必须第一行 | <?xml version="1.0" encoding="UTF-8"?> 前面不能有任何字符,包括空格、BOM头、PHP警告 |
| Content-Type头 | 服务器必须返回 application/xml; charset=utf-8 |
| 单文件上限 | 不超过50MB、50,000条URL,超出必须拆分 |
| lastmod格式 | 推荐ISO 8601格式:2026-10-07T08:00:00+08:00 |
| URL必须完整 | <loc>里必须写完整URL,含https和域名 |
在GSC中提交站点地图
前提:先验证网站所有权
提交站点地图的前提是你已经在GSC完成了网站所有权验证。如果你还没验证,先看这篇:Google Search Console站点验证完整教程。
验证方式分两种资源类型:
- 域名属性(输入
example.com):仅支持DNS TXT记录验证,覆盖所有子域名 - 网址前缀资源(输入
https://www.example.com):支持Meta标签、HTML文件等多种验证方式
提交步骤
- 登录 Google Search Console
- 左侧菜单点击「站点地图」
- 在"添加新的站点地图"输入框中,输入sitemap的完整URL(如
sitemap.xml) - 点击「提交」
输入框前面会自动显示你的域名前缀,你只需要补充后面的路径。比如已有前缀
https://www.example.com/,你就输入 sitemap.xml,不要重复写完整域名,否则会变成 https://www.example.com/https://www.example.com/sitemap.xml 导致404。
状态说明:成功 / 无法抓取 / 未知
提交后GSC会显示三种状态,很多人被"无法抓取"吓到,其实大部分情况是正常的:
| 状态 | 含义 | 处理方式 |
|---|---|---|
| 成功 | 谷歌已正常读取sitemap,识别到URL数量 | 无需操作,等待收录即可 |
| 无法抓取 | 刚提交还没轮到抓取,或文件有问题 | 刚提交时是正常的,等几小时到一天再看 |
| 类型:未知 | XML内容有问题,谷歌无法解析 | 检查XML格式,见下文排查 |
"无法抓取"刚提交时基本都会显示,这不是报错,就是谷歌还没排到你。等几小时刷新,大部分会自动变成"成功"。不要一看到红色就急着改文件。
本地CMD验证:提交前先自查
在提交到GSC之前,先用Windows CMD本地验证sitemap是否正常,避免提交后白等。
1. 检查文件能否访问、状态码是否200
curl -I https://www.example.com/sitemap.xml
必须看到 HTTP/1.1 200 OK 和 Content-Type: application/xml; charset=utf-8。
2. 模拟Googlebot爬虫访问
普通curl用的是你本机的User-Agent,和谷歌爬虫不一样。加上 -A "Googlebot" 模拟谷歌爬虫:
curl -A "Googlebot" -I https://www.example.com/sitemap.xml
如果你的服务器WAF或防火墙拦截了谷歌爬虫,普通curl可能200正常,但模拟Googlebot后返回403。这是国内服务器最常见的坑。
3. 检查XML内容是否干净
curl -A "Googlebot" https://www.example.com/sitemap.xml
看返回内容的第一个字符是不是 <(即 <?xml ...?>)。前面不能有任何空格、换行、PHP警告、错误信息。如果第一行是 PHP 报错或 Deprecated 警告,谷歌解析器直接罢工,类型显示"未知"。
常见问题排查
问题1:类型显示"未知"
这是最常见的问题,原因几乎都是XML文件被污染:
- PHP错误输出污染:自己写PHP生成sitemap时,开了
display_errors=1,任何PHP notice/warning都会打印在XML前面 - BOM头:文件用UTF-8 with BOM编码保存,前3个字节不是XML内容
- Content-Type不对:服务器返回了
text/html而不是application/xml - XML语法错误:未转义的特殊字符(&、<、>)、标签未闭合
PHP开头必须做三件事:关闭错误显示、清空输出缓冲、header在任何echo之前。关键代码:
error_reporting(0);
ini_set('display_errors', 0);
while (ob_get_level() > 0) { ob_end_clean(); }
header('Content-Type: application/xml; charset=utf-8');
少任何一步,都可能导致谷歌解析失败。
问题2:GSC显示"已发现的网页 0"
如果提交的是 <sitemapindex> 索引文件,GSC显示"已发现的网页 0"是正常的——因为索引文件本身不含URL,URL在子地图里。谷歌会自动去读子地图,不需要你手动提交每个子地图。
问题3:提交了两个sitemap,内容重复
建议只保留一个。WordPress用AIOSEO/Yoast插件自动生成的 sitemap.xml 就够了,不需要再额外提交静态文件。重复提交不会提高收录速度,反而浪费谷歌抓取预算。
问题4:robots.txt相关
确保 robots.txt 没有禁止抓取sitemap文件本身,并在末尾声明sitemap地址:
Sitemap: https://www.example.com/sitemap.xml
动态生成 vs 静态文件:怎么选
| 对比项 | 动态PHP生成 | 静态XML文件 |
|---|---|---|
| 维护成本 | 发文章自动更新,零维护 | 每次发文章需重新生成上传 |
| 服务器资源 | 每次请求执行PHP查询数据库 | 纯静态,不占PHP进程 |
| 出错概率 | PHP错误容易污染XML | 文件固定,不会变 |
| 推荐场景 | 文章频繁更新、不想手动维护 | 文章很少变动、追求稳定 |
WordPress用户直接用AIOSEO或Yoast插件自动生成即可,这两个插件的sitemap格式是谷歌最认可的,不需要自己折腾PHP。
提交后还能做什么
- 在GSC左侧「网址检查」工具中,输入你的文章URL,点击"请求编入索引",加快单篇文章收录
- 每周查看GSC的「网页索引」报告,看哪些页面收录成功、哪些被排除
- 如果页面内容有大更新,更新sitemap中对应的lastmod日期,提醒谷歌重新抓取
- 不要频繁重复提交同一个sitemap,谷歌有自己的抓取节奏