sitemap 里有 URL 但 Search Console 不显示(2026)

sitemap 已提交、状态 Success,URL 却始终不出现在 Pages 报告里。逐项排查的具体方法,附最新 GSC 菜单路径。

你的 sitemap.xml 返回 200,里面列了 800 个 URL,Search Console → Sitemaps 状态是 Success,还写着 “Discovered pages: 800”——但 Page indexing 报告里却几乎找不到这些 URL。

最快的答案: Sitemaps 报告里的 “Discovered pages” 只代表 Google 从 XML 里解析出了这么多 URL,它既不是收录数,也不是”待处理队列”。想看 Google 到底拿这些 URL 做了什么,打开 Page indexing(左侧导航 Indexing 下面),用报告顶部的下拉框把 All known pages 切换成 All submitted pages,或者直接选 Specific sitemap URL 指定你的 sitemap。这个视图会精确告诉你 sitemap 里多少 URL 是 Indexed、多少是 Not indexed,并按原因分类。十有八九 URL 都在,只是被归到了 “Crawled - currently not indexed”、“Page with redirect” 之类的原因下面,而不是真的丢了。

如果 Sitemaps 报告本身显示 0 discovered pages(不是数量偏少,是字面上的零),那是另一个更简单的 bug:文件格式有问题、提交到了错的 property,或者 URL 和 Google 选定的 canonical 对不上。下面两种情况都会讲到。

症状

  • sitemap.xml 在浏览器里返回 200 且列出了 URL
  • Sitemaps 报告状态是 Success,但 “Discovered pages” 为 0,或远低于真实 URL 数
  • Page indexing 报告里 sitemap 的 URL 全是 Not indexed,或者根本找不到
  • 某个 URL 在 URL Inspection 里显示属于任何 sitemap

先判断你属于哪一类

Sitemaps 报告显示最可能的原因跳到
状态 Couldn’t fetchrobots.txt 拦了文件、URL 写错,或有未解决的 manual action原因 8
Success,Discovered pages = 0XML 格式错、带 BOM、<loc> 用了相对路径、http/https 不符原因 1、5、7
Success,发现数远低于真实数sitemap 过大,被截断在 50,000 URL原因 6
Success,发现数正确,但 Pages 报告空URL 与 canonical 不符、返回 404/重定向,或 property 错原因 2、3、4
一切都对,只是刚提交处理延迟——等 2-3 天”哪些情况不是你的错”

第一步:先确认这真的是个问题

动手改任何东西之前,先搞清楚 URL 到底去哪了。光这一步就能解决大多数”消失”的报告,因为 URL 通常根本没消失。

  1. Search Console → IndexingPage indexing
  2. 点报告顶部的来源下拉框(默认 All known pages),选 All submitted pages,或 Specific sitemap URL → 你的 sitemap。
  3. Why pages aren’t indexed 那张表。如果你的 URL 出现在 “Crawled - currently not indexed”、“Discovered - currently not indexed”、“Page with redirect”、“Alternate page with proper canonical tag”、“Duplicate without user-selected canonical” 这类原因下面,那说明 sitemap 是正常工作的——Google 读到了 URL 并做了收录判断。这是收录问题,不是 sitemap 问题。

想查单个 URL 的来源:把它粘进 URL Inspection 工具,展开 Page indexing,看 Discovery。那里会列出 Google 关联到这个 URL 的 Referring sitemaps。如果你的 sitemap 在列表里,说明 Google 接受了它;如果显示没找到 sitemap,说明你 sitemap 里的 URL 形式和 Google 选定收录的那个对不上——去看原因 2。

常见原因

1. Sitemap 用 http 但站点是 https(或反过来)

<url><loc>http://yourdomain.com/page/</loc></url>

Google 会完全按 sitemap 里写的字面去抓取 URL(官方 build-a-sitemap 规范明确写了这点)。如果你站点跑 https、sitemap 里写 http,Google 跟着重定向去收录 https 那个,而 http 这条就被算成一次 redirect、而不是一次干净的匹配。

如何判断:

curl -s https://yourdomain.com/sitemap.xml | grep "<loc>" | head -5
# 所有 URL 都必须已经是 https://

2. 尾斜杠、大小写或 www 与 canonical 不一致

<url><loc>https://yourdomain.com/article</loc></url>

但你的 canonical 标签是 https://yourdomain.com/article/(带斜杠)。Google 把这俩当成两个不同的 URL,并收录 rel="canonical" 指向的那个,而不是 sitemap 里的字符串。这是”已发现”的 URL 始终不显示为干净已提交页面的头号原因

如何判断。 抽 5 个 sitemap URL,逐个和它自己的 canonical 比对:

for url in $(curl -s https://yourdomain.com/sitemap.xml | grep -oE 'https://[^<]+' | head -5); do
  canonical=$(curl -sL "$url" | grep -oE '<link rel="canonical" href="[^"]+"')
  echo "sitemap:   $url"
  echo "canonical: $canonical"
  echo "---"
done

必须完全一致——协议、www. vs 裸域、大小写、尾斜杠都算。

3. Sitemap 所在的 property 和你正在看的不是同一个

你的 Search Console 验证的是 https://yourdomain.com/,但 sitemap 在 https://www.yourdomain.com/sitemap.xml。对一个 URL prefix property 来说,这是两个不同的站点,所以这份 sitemap 的 URL 永远不会汇总进你正在看的报告。

如何判断。 Search Console → SettingsOwnership verification,或左上角的 property 切换器。看 property 是 Domain 类型(覆盖所有子域、协议、路径)还是 URL prefix 类型(只覆盖那个精确 prefix)。

4. Sitemap 里的 URL 返回 404 或重定向

sitemap 写了一个 URL,但抓取后是 404301404 直接丢弃;301 被并到它的重定向目标里,于是列出来的那个 URL 永远不是被收录的那个。

如何判断:

for url in $(curl -s https://yourdomain.com/sitemap.xml | grep -oE 'https://[^<]+' | head -20); do
  status=$(curl -sI -o /dev/null -w "%{http_code}" "$url")
  echo "$status $url"
done

应该全部 200。任何 301 / 404 都要修。

5. XML 不规范,被 Google 默默截断

sitemap 协议很严格,Google 对一些错误的容忍方式是:只读到第一个出错前的有效部分。

  • <?xml version="1.0" encoding="UTF-8"?> 必须是文件第一行——前面不能有字节序标记(BOM)、空格或空行。
  • 必须有 <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 这个 namespace。
  • 标签值必须做实体转义(URL 里出现裸 & 会直接让文件出错)。
  • 文件必须是 UTF-8 编码。

如何判断。 用浏览器打开文件(有解析错误会立刻报出来),再用校验工具跑一遍,比如 XML Sitemaps Validator。查 BOM:

curl -s https://yourdomain.com/sitemap.xml | head -c 3 | xxd
# 开头若是 "ef bb bf" 就是 UTF-8 BOM,必须去掉

6. Sitemap 文件太大

单个 sitemap 上限是 50,000 个 URL 或未压缩 50 MB(截至 2026 年 6 月,Google 文档确认的现行限制)。超限后的行为才是坑:

  • 超过 50,000 URL:Google 忽略前 50,000 之后的全部。
  • 超过 50 MB:Google 可能直接拒收整个文件。

这两种都不会触发 Search Console 报错——状态照样是 Success,只是 discovered 数比你真实 URL 总数少。这个差值就是线索。

修法: 拆成 sitemap index 加多个子 sitemap(见 Step 5)。

7. sitemap-index 用了相对路径

<sitemapindex>
  <sitemap><loc>./sitemap-1.xml</loc></sitemap>  <!-- 相对路径,会被拒收 -->
</sitemapindex>

<loc> 必须是完整的绝对 URL。Google 完全按写的字面抓取,相对路径解析不到任何东西,子 sitemap 永远读不到。

8. 状态是 “Couldn’t fetch”

如果 Sitemaps 报告显示的是 Couldn’t fetch 而不是 Success,说明 Google 根本没读到文件。常见原因:

  • robots.txt 拦住了 sitemap 路径(Google 抓 sitemap 时也遵守 robots.txt)。
  • 提交的 URL 写错,或返回非 200 状态。
  • 站点有未解决的 manual action——有未处理的人工处罚时 sitemap 不会被处理(Search Console → Security & Manual ActionsManual actions)。

如何判断。 用无痕窗口打开 sitemap URL,再查 https://yourdomain.com/robots.txt 里有没有 Disallow 规则正好命中它。“Couldn’t fetch” 也可能是旧状态;如果你已经修好访问,点开那行 sitemap 重新提交即可。

最短修复路径

Step 1:用浏览器和校验工具打开 sitemap.xml

浏览器:  https://yourdomain.com/sitemap.xml   (应看到结构化 XML,无错误提示)
校验:    https://www.xml-sitemaps.com/validate-xml-sitemap.html

XML 坏了就先修——文件解析不了,后面所有步骤都没意义。

Step 2:抽 5 个 URL 验 canonical 一致性

跑原因 2 的 canonical 对比脚本。修掉任何协议、www. vs 裸域、大小写或尾斜杠上的不一致。治本的办法是统一源头:让 sitemap 生成器和 canonical 标签渲染器调用同一个 urlFor() helper,从根上避免两者漂移。

Step 3:确认 sitemap 在正确的 property 上

Search Console → Settings,看 property 类型:

  • Domain propertyyourdomain.com):覆盖所有子域、协议、路径。
  • URL prefix propertyhttps://yourdomain.com/):只覆盖那个精确 prefix。

如果 sitemap 在 www.yourdomain.com 但 property 是 https://yourdomain.com/(无 www),要么换成 Domain property,要么给 www 主机单独加一个 URL prefix property。

Step 4:确认每个 URL 都返回 200

跑原因 4 的 curl 状态脚本。对每个有问题的 URL:

  • 301:直接把最终目标 URL 写进 sitemap。
  • 404:从 sitemap 里删掉。

Step 5:拆大 sitemap

<!-- sitemap-index.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap><loc>https://yourdomain.com/sitemap-articles.xml</loc></sitemap>
  <sitemap><loc>https://yourdomain.com/sitemap-pages.xml</loc></sitemap>
</sitemapindex>

每个子 sitemap 都保持远低于 50,000 URL 和 50 MB

Step 6:重新提交,再用过滤器验证

Search Console → Sitemaps → 删掉旧的那条 → 重新输入 URL → Submit。然后去 Page indexing,把下拉框设成 Specific sitemap URL,看接下来几天 Indexed 数往上走。

如何确认已修好

  1. Sitemaps 报告显示 Success,且 “Discovered pages” 等于(或接近)你真实的 URL 数。
  2. Page indexing 过滤到 All submitted pages 时,大部分 URL 是 Indexed,剩下少数也归在你能看懂的原因下面。
  3. 对一个抽样 URL 跑 URL Inspection,在 Page indexing → Discovery → Referring sitemaps 里看到你的 sitemap,且 Google 选定的 canonical 和你 sitemap 里的 <loc> 一致。

哪些情况不是你的错

刚提交的 sitemap 几乎立刻会被抓取,但处理里面的 URL 要时间——通常几天,大站或权重低的站更久。如果你是过去 48-72 小时内提交的、文件也能校验通过,先给它点时间,再深挖。

容易误判的情况

  • 以为 “Success” = 每个 URL 都进了收录队列。 不是——它只代表文件解析成功。
  • 以为 “Discovered pages” = 收录数。 这是两个完全不同的数:前者是从 sitemap 解析出的 URL 数,后者是真正进了索引的数。要比这两个数,用 Page indexing 的过滤器,不是 Sitemaps 报告。
  • 以为 sitemap 一提交就生效。 抓取很快,但抓取并收录里面的 URL 要几天。
  • 以为 discovered 数偏低 = Google 拒收了 sitemap。 有时只是报告还没刷新;过两天再看。

预防建议

  • sitemap 与 canonical 标签用同一数据源生成(共享一个 urlFor() helper),让 URL 形式无法漂移。
  • 在 CI 里校验 sitemap:XML 格式正确、无 BOM、URL 数不超上限、每个 <loc> 都返回 200
  • URL 形式(协议、www、尾斜杠)与 canonical 完全一致。
  • 单 sitemap 超过约 5,000 URL 就尽早拆成 sitemap index。
  • 每次部署后 curl 一次 sitemap,确认 200 且 URL 数符合预期。

FAQ

Q:我的 Sitemaps 报告是 Success,但 Discovered pages 是 0,怎么回事? A:Google 解析出的有效 URL 是零。常见元凶:XML 声明前有 BOM 或空格、缺 urlset namespace、<loc> 用了相对路径、或有未转义的 &。用浏览器打开文件看解析错误,再校验一遍。

Q:怎么看 sitemap 里哪些 URL 真的被收录了? A:打开 Page indexing,点顶部下拉框,选 All submitted pagesSpecific sitemap URL。Sitemaps 报告里的 discovered 数永远不会告诉你这个。

Q:单个 sitemap 能放多少 URL? A:最多 50,000 个 URL 或未压缩 50 MB(2026 年 6 月)。超出后 Google 只读前 50,000 个;更多就用 sitemap index。

Q:lastmod 必须填吗?Google 会信吗? A:选填,但推荐填。Google 只在 lastmod 可验证为准确时才采信。如果每次构建都把每条的 lastmod 设成当天日期,Google 会察觉并在全站范围内忽略这个字段——所以要给每个 URL 输出真实的最后修改时间。

Q:要为每种语言单独提交 sitemap 吗? A:都行。分语言(或分版块)的 sitemap 能让你用 Specific sitemap URL 过滤器更方便地单独监控收录。

相关阅读

标签: #SEO #Google #Search Console #收录 #排查 #Sitemap