完整教学案例

看懂一个问题,再决定怎么改。

完整的修改前后输入,以及证据能说明什么。

合成数据 · 离线样例已执行 · 未检查真实网站
本页目录
合成教学案例。

这里的网址与输入都是编写的教学文件。四个离线案例没有检查或修改真实网站,不声称进行了实时请求、账号操作,也没有收录结果或流量数据。

随附离线检查已在 2026-10-10 使用 Python 3 执行。八组修改前后结果均符合预期。另外还有 一次使用合成输入的真实本地 CLI 报告。仓库保留完整文件与检查器 ↗。

准备公开的页面被禁止抓取

合成教学案例

证据:合成教学案例。没有检查或修改真实网站。

输入

打开本目录的 before/robots.txt,先自己判断问题,再运行检查。

robots.txt 是给爬虫看的抓取规则文件。User-agent: * 表示通配爬虫规则组;Disallow: / 表示不允许抓取这个来源下的所有路径。

检查发现

通配爬虫组禁止所有路径,包括 /trail-guide/。

如何修正

先确认页面确实应该公开,再移除误设的全站禁止抓取规则。对比 before/ 和 after/ 文件。

验收标准

修正后的样例规则允许 Googlebot 获取 /trail-guide/。这项检查只验证抓取许可,不验证收录。

robots 规则控制抓取,不能作为隐私保护措施。被禁止抓取的网址仍可能出现在搜索中。不要把这个开放抓取的样例直接搬到私密网站。

官方参考:Google Search Central。原稿核验日期:2026-10-10。

本案例固定链接

修改前:完整输入

robots.txt · 下载 robots.txt

教学示例 / 原始记录 / 记录模板
# SYNTHETIC fixture: accidental launch block
User-agent: *
Disallow: /

离线输出:修改前样例的本课验收条件未通过,符合预期。仅检查合成输入中的这一条件。

修改后:完整教学文件

robots.txt · 下载 robots.txt

教学示例 / 原始记录 / 记录模板
# SYNTHETIC fixture: intended public launch
User-agent: *
Disallow:
Sitemap: https://example.com/sitemap.xml

离线输出:修改后样例的本课验收条件通过,符合预期。仅检查合成输入中的这一条件。

这个验收能说明:样例规则允许 Googlebot 获取 /trail-guide/。只验证抓取许可,不验证收录。

未检查:真实 HTTP 访问、搜索引擎选择的 canonical、收录、排名与流量。

官方参考资料 ↗ · 跟着对应教程检查

应当公开参与搜索的页面仍带有 noindex

合成教学案例

证据:合成教学案例。没有检查或修改真实网站。

输入

打开本目录的 before/page.html,先自己判断问题,再运行检查。

noindex 是“不要把此页面放进搜索索引”的指令,可以出现在 HTML 元数据或 HTTP 响应头中。公开可访问与允许被收录,是两回事。

检查发现

HTML 的 robots meta 标签包含 noindex。

如何修正

从生成这条指令的源头移除意外的 noindex。对于真实网站,HTML 元数据和响应头两处都要检查。对比 before/ 和 after/ 文件。

验收标准

修正后的 HTML 和模拟响应头中都没有 noindex 指令。Google 是否收录仍未验证。

Google 必须能抓取页面,才能看到 noindex。不要为了通过检查就移除私密内容或不应参与搜索的内容上有意设置的 noindex。另加一条 index,不能覆盖另一条适用的 noindex。

官方参考:Google Search Central。原稿核验日期:2026-10-10。

本案例固定链接

修改前:完整输入

page.html · 下载 page.html

教学示例 / 原始记录 / 记录模板
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
<meta name="robots" content="noindex, follow">
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>

response.json · 下载 response.json

教学示例 / 原始记录 / 记录模板
{
  "synthetic": true,
  "status": 200,
  "headers": {
    "Content-Type": "text/html; charset=utf-8"
  },
  "bodyFile": "page.html"
}

离线输出:修改前样例的本课验收条件未通过,符合预期。仅检查合成输入中的这一条件。

修改后:完整教学文件

page.html · 下载 page.html

教学示例 / 原始记录 / 记录模板
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>

</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>

response.json · 下载 response.json

教学示例 / 原始记录 / 记录模板
{
  "synthetic": true,
  "status": 200,
  "headers": {
    "Content-Type": "text/html; charset=utf-8"
  },
  "bodyFile": "page.html"
}

离线输出:修改后样例的本课验收条件通过,符合预期。仅检查合成输入中的这一条件。

这个验收能说明:修正后的 HTML 和模拟响应头中没有 noindex 指令。Google 是否收录仍未验证。

未检查:真实 HTTP 访问、搜索引擎选择的 canonical、收录、排名与流量。

官方参考资料 ↗ · 跟着对应教程检查

站点地图地址返回了应用页面外壳

合成教学案例

证据:合成教学案例。没有检查或修改真实网站。

输入

打开本目录的 before/sitemap.xml,先自己判断问题,再运行检查。

站点地图应给出搜索引擎可读取的网址清单。“应用页面外壳”指供浏览器加载应用的通用 HTML 页面。文件名叫 sitemap.xml,不代表里面真的装着 XML 地图。

检查发现

模拟响应状态为 HTTP 200,但正文是 HTML,不是应该返回的 XML 站点地图。

如何修正

让站点地图路由在“所有其他路径都返回 HTML”的兜底路由之前生效,返回真正的站点地图 XML,并使用适当的 XML 内容类型。对比 before/ 和 after/ 文件。

验收标准

修正后的样例能解析为一个 sitemap urlset,其中包含一个绝对网址。本例没有声称已经提交地图或完成抓取。

文件名和 HTTP 200 单独都不能证明地图有效。普通 HTML 页面不是 XML 站点地图。Google 也支持其他地图格式,但这项练习特意只检查 XML。地图可访问不保证页面收录。

官方参考:Google Search Central。原稿核验日期:2026-10-10。

本案例固定链接

修改前:完整输入

response.json · 下载 response.json

教学示例 / 原始记录 / 记录模板
{
  "synthetic": true,
  "requestedUrl": "https://example.com/sitemap.xml",
  "status": 200,
  "headers": {
    "Content-Type": "text/html; charset=utf-8"
  },
  "bodyFile": "sitemap.xml"
}

sitemap.xml · 下载 sitemap.xml

教学示例 / 原始记录 / 记录模板
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>

</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>

离线输出:修改前样例的本课验收条件未通过,符合预期。仅检查合成输入中的这一条件。

修改后:完整教学文件

response.json · 下载 response.json

教学示例 / 原始记录 / 记录模板
{
  "synthetic": true,
  "requestedUrl": "https://example.com/sitemap.xml",
  "status": 200,
  "headers": {
    "Content-Type": "application/xml; charset=utf-8"
  },
  "bodyFile": "sitemap.xml"
}

sitemap.xml · 下载 sitemap.xml

教学示例 / 原始记录 / 记录模板
<?xml version="1.0" encoding="UTF-8"?>
<!-- SYNTHETIC teaching fixture. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://example.com/trail-guide/</loc></url>
</urlset>

离线输出:修改后样例的本课验收条件通过,符合预期。仅检查合成输入中的这一条件。

这个验收能说明:修正后的样例能解析成一个含有一个绝对网址的 sitemap urlset。未声称已经提交或抓取。

未检查:真实 HTTP 访问、搜索引擎选择的 canonical、收录、排名与流量。

官方参考资料 ↗ · 跟着对应教程检查

两个 canonical 标签指向不同网址

合成教学案例

证据:合成教学案例。没有检查或修改真实网站。

输入

打开本目录的 before/page.html,先自己判断问题,再运行检查。

canonical 是告诉搜索引擎“我希望这个网址作为此内容的代表”的偏好声明,不是保证搜索引擎一定采用它的命令。

检查发现

同一个页面的两个 canonical link 元素分别指向不同网址。

如何修正

确认预期的代表页面,只输出一条一致的 canonical,并让站点地图与它保持一致。对比 before/ 和 after/ 文件。

验收标准

只剩一条 canonical,且与样例站点地图中的网址一致。Google 实际选中的规范网址仍未验证。

canonical 声明只表达偏好,Google 可能选择不同的代表页面。复制这个模式前,应先确认所选目标合适且可访问。

官方参考:Google Search Central。原稿核验日期:2026-10-10。

本案例固定链接

修改前:完整输入

page.html · 下载 page.html

教学示例 / 原始记录 / 记录模板
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
<link rel="canonical" href="https://example.com/trail-guide/">
<link rel="canonical" href="https://example.com/trails/">
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>

sitemap.xml · 下载 sitemap.xml

教学示例 / 原始记录 / 记录模板
<?xml version="1.0" encoding="UTF-8"?>
<!-- SYNTHETIC teaching fixture. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://example.com/trail-guide/</loc></url>
</urlset>

离线输出:修改前样例的本课验收条件未通过,符合预期。仅检查合成输入中的这一条件。

修改后:完整教学文件

page.html · 下载 page.html

教学示例 / 原始记录 / 记录模板
<!doctype html>
<!-- SYNTHETIC teaching fixture. Not a captured production response. -->
<html lang="en"><head><meta charset="utf-8"><title>Synthetic trail guide</title>
<link rel="canonical" href="https://example.com/trail-guide/">
</head><body><main><h1>Synthetic trail guide</h1><p>Invented content for an offline SEO exercise.</p></main></body></html>

sitemap.xml · 下载 sitemap.xml

教学示例 / 原始记录 / 记录模板
<?xml version="1.0" encoding="UTF-8"?>
<!-- SYNTHETIC teaching fixture. -->
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url><loc>https://example.com/trail-guide/</loc></url>
</urlset>

离线输出:修改后样例的本课验收条件通过,符合预期。仅检查合成输入中的这一条件。

这个验收能说明:只保留一条 canonical,且与样例地图网址一致。Google 实际选择的规范网址仍未验证。

未检查:真实 HTTP 访问、搜索引擎选择的 canonical、收录、排名与流量。

官方参考资料 ↗ · 跟着对应教程检查