网站地图怎么写:四个字段,Google 有两个根本不看

网站地图是一份放在站点根目录的 UTF-8 文件,列着你希望被搜到的完整网址。四个字段里 Google 明说有两个不看,第三个只有经得起和页面比对才算数 —— 这里有可粘的两份 XML、一段清点命令,和四种常见写法错误。

改写与发布6 分钟读完1286 次阅读
网站地图怎么写:四个字段,Google 有两个根本不看

网站地图就是一份 UTF-8 编码的文件,放在站点根目录,里面列着你希望出现在搜索结果里的完整网址。每条网址允许写四个字段,Google 明说有两个它根本不看。这份文件不能让页面被收录,它只做一件事:告诉爬虫你这儿有哪些页面,以及 —— 如果你对其中一个字段诚实的话 —— 它们上次是什么时候变的。

读这篇前

你需要的是「想被排名的页面清单」,那和「站上所有页面的清单」不是一回事。筛选后的列表页、标签归档、分页出来的重复地址、下单成功页,都不该列进去 —— 不是因为列了会被扣分,而是因为这份文件是一份意图声明,其他信号会拿它来对照。

用 Shopify、WordPress、Webflow 这类系统的话,这份文件多半已经自动生成好了。别再手搓第二份,先把现有那份读一遍 —— 这一篇对你来说就从「怎么建」变成「怎么审」。审的时候重点看两件事:里面有没有你压根不想要的那些筛选页,以及地址是不是你现在实际对外用的那一套。

为什么四个字段里有两个是废的

XML 格式允许每条网址写四个元素。Google 的网站地图文档(2026-08-24 读)用一句话处理掉了其中一半:「Google ignores <priority> and <changefreq> values.」

元素Google 怎么用值不值得写
<loc>网址本身必填
<lastmod>准确才用属实才写
<changefreq>不看不写
<priority>不看不写

第二行那个「准确才用」是条件,不是偏好:Google 的原文是「uses the <lastmod> value if it's consistently and verifiably (for example by comparing to the last modification of the page) accurate」。文档接着定义了什么才算「变了」,而这半句最常被忽略 ——「an update to the main content, the structured data, or links on the page is generally considered significant, however an update to the copyright date is not.」

所以每天夜里把当天日期盖到每一条网址上的那种模板,并不是在发一个很强的新鲜度信号。它是在每条网址上、每天晚上,发一个可以被拿去和页面比对、然后被判定为不实的字段。这件事有多普遍我们测过:24 个站里 13 个写了等于没写

sitemap 是一份关于你自己站点的、可被核实的声明。每一个你随手填上去的字段,都是一条会被查出来不成立的声明。

还有一件出海站会关心的事:XML 这个格式之外,Google 还支持几种扩展,文档里点名的是图片、视频、新闻内容,以及页面的多语言版本。也就是说多语言站的语种对应关系可以写在这份文件里,而不是只能靠页面上的标签。要不要用它是另一个判断 —— 站上语种少、每页都能自己声明清楚的时候,多维护一份扩展未必划算;语种多、页面多的时候,写在一处比散在每一页上好管。

五步把网站地图做出来

小站手写一遍大约二十分钟。哪怕之后交给插件接管,也值得先手动做一次 —— 手动那一遍会告诉你,你站上有哪些网址是你没料到会看见的。

  1. 把你想进搜索结果的网址列出来,写成带协议和域名的完整地址。相对路径无效,文档写的是「Google will attempt to crawl your URLs exactly as listed.」
  2. 每个地址写一个 <url> 块,含 <loc>;能诚实给出就再加 <lastmod>。和所有 XML 一样,& 这类字符要转义。
  3. 存成 UTF-8 放到站点根目录。位置是有讲究的:「unless you submit your sitemap through Search Console, a sitemap affects only descendants of the parent directory.」
  4. robots.txt 里写一行 Sitemap:,同时在 Search Console 里提交一次。两条路互相独立,成本都很低。
  5. 到上限就拆。单个文件的上限是「50MB (uncompressed) or 50,000 URLs」,任何一项超了就拆开,改成提交一个索引文件。

第 4 步在站大一点之后还有一个额外好处:分开提交几份,就能在 Search Console 里按组看收录情况 —— 这是你发现「站上某一块被收了、另一块没被收」的方式。

交付物:两份文件,一段清点命令

最小的一份。整个格式就这么多,除了这两行头部没有别的要写对的东西:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://www.example.com/foo.html</loc>
    <lastmod>2026-08-24</lastmod>
  </url>
</urlset>

索引文件,超上限或者想分组看数据时用:

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>https://www.example.com/sitemap-blog.xml</loc>
  </sitemap>
  <sitemap>
    <loc>https://www.example.com/sitemap-products.xml</loc>
  </sitemap>
</sitemapindex>

再加一段清点,每次部署之后跑一遍:它告诉你现在到底声明了多少条网址、文件离上限还有多远,以及有没有列了却打不开的地址。

curl -s https://example.com/sitemap.xml \
  | grep -o '<loc>[^<]*' | sed 's/<loc>//' | tee /tmp/sitemap-urls.txt | wc -l

# 文件字节数,对着 50MB 上限看
curl -s https://example.com/sitemap.xml | wc -c

# 列进去了却不返回 200 的
while read -r u; do
  printf '%s %s\n' "$(curl -s -o /dev/null -w '%{http_code}' "$u")" "$u"
done < /tmp/sitemap-urls.txt | grep -v '^200'

做错了会怎样

里面列的网址会跳转

症状:Search Console 里「网页会重定向」的条数正好等于站上某一块的页面数。成因:文件是在改网址之前生成的。上面第三条命令一遍就能找出来。

sitemap 和 canonical 各说各的

Google 的网址规范化文档专门警告过这一种:不要「specify one URL in a sitemap, but a different URL for that same page using rel="canonical"」。写进网站地图本来就是个弱信号,所以这种矛盾一般不会赢 —— 只是把这个信号浪费掉了。

手机版和桌面版两个地址都列了

一个页面有两套地址的话,Google 建议「pointing to only one version in a sitemap」。两个都列又不做标注,等于把一件你自己已经清楚的事丢给爬虫去猜。

文件在,但没人被告知

没有被声明过的文件只能靠约定路径被撞见。robots.txt 里那一行成本是一行字,而谁写了、写了的又能不能打开,实测下来差别比想象的大。

网站地图做不到的事

它不能让页面被收录。它让页面可被发现,那是另一件事,而且弱得多;对一个靠自己内链就已经能被走到的页面,它什么都不多给。内链干净的小站上,它的现实价值是「一份能拿来逐条比对的清单」,不是流量输入。

它也救不了被屏蔽、坏掉或者被有意排除的页面。列上一个会跳转、返回 404 或者带着 noindex 的地址,不会覆盖掉其中任何一项。停手信号是:Search Console 里的条数和你文件里的条数对上,被发现的页面就是你想要的那些 —— 到这儿就没有下一个状态了。

再往后一步是「告诉引擎有东西变了」,那是另一套机制,也有它自己的坑,见 页面改完之后怎么推送收录。想看从抓取到被引用的整条链路而不是单个文件,诊断路径从这里开始

常见问题

小站有必要做网站地图吗

页面不多、而且每一页都能从自己的内链走到的话,没必要。站大了、页面链得不好、或者想按板块分开看收录情况,它才有用。反正做一份也几乎不花成本,所以实操上答案通常是「做」,道理上答案是「不是必需」。

文件该放在哪

放站点根目录。因为除非通过 Search Console 提交,一份网站地图「affects only descendants of the parent directory」。放在 /blog/sitemap.xml 的文件替 /products/ 说不了话。

RSS 能当 sitemap 提交吗

能。Google 接受 RSS 2.0 和 Atom 1.0 的源当作 sitemap 提交,但文档有一句要记住:这种源「only provides information on recent URLs」。它是个不错的新鲜度通道,是个很差的清单。

一份文件最多能放多少条

50,000 条,或者未压缩 50MB,先到哪个算哪个。超了就拆文件、改提交索引。多数站离这两个数都还很远,真到了的那些,一般是从一条校验错误里知道的,不是从清点里。

本文属于 QueryWin 实操手册 · 第 2 阶

网站地图怎么写:四个字段,Google 有两个根本不看