Open Graph 预览与元数据审计

全球通用工具

这个工具不会联网抓取或爬取任何网址,也不是实时预览:读取完全在本地进行。请在浏览器里打开你想审计的页面,按 `Ctrl+U`(查看网页源代码)复制 `<head>` 部分——如果也想做正文检查就复制整份文档——然后粘贴到下方。工具会读取机器读到的东西:搜索结果会用的标题和描述、分享链接会用的 Open Graph 和 Twitter 标签、canonical、robots meta、结构化数据——然后给出二十项检查,说明缺了什么、什么写了两遍、什么和什么互相矛盾。同一个页面还能从地址列表构建 `sitemap.xml`,并从三个选择构建 `robots.txt`,两者的每一行都有解释。

三项共享同一个主题的工作:机器会从一个站点读到什么。每种模式只显示它用到的字段。

在浏览器里:打开页面,按 Ctrl+U 查看源代码,全选并粘贴。整份文档或只有 head 都可以;带 body 会增加标题层级和图片检查。

可选。页面没有自己的 canonical 时,它会显示在搜索结果预览里。

只有中间那种策略会读取。粘贴整个地址会被缩减为路径;没有前导斜杠的路径会自动补上。

留空使用文件通常的名字:“sitemap.xml”、“robots.txt”、“head-audit.txt”。

边输入边更新。所有计算都在你的浏览器里完成,数据不会离开本机。

按爬虫的方式读取

没有待修复项

18/20 项检查通过,2 项值得一看。分享卡片由 Open Graph 构建。

标题
57 个字符
描述
146 个字符
通过检查
18 / 20
分享卡片
Open Graph
这里没有任何东西会阻止页面被找到。剩下的差别,是一个在列表里有用的结果,和一个只是出现了的结果。

搜索结果和卡片

搜索结果,按爬虫会构建的样子:

Mortgage Calculator - Monthly Payment, No Signup | danfio
https://danfio.com/tools/mortgage-calculator/
Work out a monthly payment, the total interest over the life of the loan, and what one
extra payment a month does. Free, no signup, formula shown.

字符数是精确的:标题 57,描述 146。
通常引用的建议值是 60 和 155;真实结果框按像素宽度截断,
所以字母和计数同样重要。

------------------------------------------------------------

由 Open Graph 构建:

标题         Mortgage Calculator - danfio
描述         Monthly payment, total interest, and what one extra payment does.
图片         https://danfio.com/og/mortgage.png
站点名       danfio
地址         https://danfio.com/tools/mortgage-calculator/
类型         website

每项检查及其说明

检查结果说明
一个标题通过“Mortgage Calculator - Monthly Payment, No Signup | danfio”
标题长度通过57 个字符,在通常引用的 60 个以内。
一个 meta 描述通过146 个字符。
描述长度通过146 个字符,在通常引用的 155 个以内。
canonical 链接通过https://danfio.com/tools/mortgage-calculator/
canonical 与 robots通过没有矛盾。
Robots通过没有 `robots` meta,意味着 index 和 follow。
viewport 标签通过width=device-width, initial-scale=1
字符集通过utf-8
<html> 上的语言通过en
favicon通过/favicon.svg
Open Graph 标签通过`og:title`、`og:description` 和 `og:image` 都在。
图片地址通过https://danfio.com/og/mortgage.png
图片形状待看没有 `og:image:width` 和 `og:image:height`,所以仅凭页面无法检查形状。这个工具不抓取图片:声明这两个数字,才能让爬虫在图片下载完成前排好卡片。
分享地址通过https://danfio.com/tools/mortgage-calculator/
Twitter/X 卡片通过`twitter:card` 是 `summary_large_image`,没有自己的图片,所以卡片借用 Open Graph 的图片。
写了两遍的标签通过每个 meta 标签都只写了一次。
结构化数据通过没有 JSON-LD。这是允许的:它决定结果能否带星级、价格或食谱,而不决定是否出现。
一级标题通过正好一个。
alt 文本待看1 张图片中有 1 张没有 `alt`,屏幕阅读器会把它们读成“图片”,搜索引擎也不知道它们显示什么。

顺序就是人会采用的修复顺序:页面不能缺少的标签排在最前。

这次读取无法告诉你的事

  • 结果框按像素宽度而不是字符数截断:六十个 `i` 和六十个 `W` 宽度不同。这里的计数是精确的,截断标记在通常引用的 60 和 155 个字符处,那是建议值而不是限制。
  • 没有抓取任何页面,所以这里没有图片本身,也不一定是服务器实际发送的内容:边缘 worker、混淆邮箱的代理或客户端渲染器,都可能在源代码和爬虫之间改写标签。
  • 执行 JavaScript 的爬虫看到的文档,和不执行的不同。粘贴的内容按文本读取,正是不执行 JavaScript 的爬虫收到的东西。
  • 这些标签没有一个是单独的排名因素:它们决定结果进入列表后长什么样,而不是决定它能否进入。

因为不抓取任何东西,粘贴进来的私密页面不会去任何地方:审计完全在你的浏览器里运行,不上传任何内容。这也是为什么工具能直说它无法知道什么——图片本身、托管服务或建站工具在输出路上改写了什么,以及执行 JavaScript 的爬虫会看到什么——以及为什么它是一份本地清单,而不是对页面真实渲染效果的主张。

关于这个工具

有没有把链接粘进聊天,然后看着预览一片空白?那通常是 Open Graph 标签缺失或格式错误。这个页面像爬虫一样读取页面:标题、描述、canonical、Open Graph 与 Twitter 卡片、JSON-LD、标题层级和图片 alt 文本,形成一份二十项清单。

读取在客户端完成,来源只有你粘贴的 HTML;二十项检查按修复顺序分组:页面不能缺少的三项失败,然后是卡片,最后是正文。它还能从地址列表构建 `sitemap.xml` 和 `robots.txt`,并解释写出的每一行。

这些标签没有一个是单独的排名因素;它们决定结果进入列表后长什么样,而不是决定它能否进入。标题宽度以精确字符数报告,而不是编造一个像素估计。相信一份全绿的清单之前,先检查你实际粘贴了什么。

它是怎么工作的

像爬虫那样读页面

搜索结果由三个字段构成:`<title>`、`<meta name="description">` 和地址。分享链接由第四组构成:多数平台用 Open Graph(`og:title`、`og:description`、`og:image`、`og:url`、`og:site_name`),X 用 `twitter:*`,它也会按名称回退到 `og:` 标签。本页读取所有这些,然后并排显示两个预览并应用回退,所以只有 `twitter:*` 的页面会显示成只有 `twitter:*` 的页面,而不是显示成一张有卡片的页面。

读取是对文本的扫描,而不是对活动文档的解析,这是刻意的:它正是不执行 JavaScript 的爬虫收到的东西,也是为什么写在注释里或 `<script>` 里的 `<meta>` 会被正确忽略。标签读取器与压缩器使用的是同一个,所以引号属性值里的 `>` 在这里也不会结束标签。

对某个字段无话可说的页面不会被塞入默认值:检查会把它报告为缺失,预览会显示实际会被显示的东西——没有 `og:image` 的页面是一个灰框,没有描述的页面是搜索引擎从正文里挑出的一句话。

二十项检查,以及为什么它是清单而不是分数

其中三项是失败而不是警告,因为页面没有它们就真的不能上线:标题、描述和 canonical——再加上 Open Graph 标签,没有它分享链接只是一个裸地址。其余是警告:标题超过广为引用的 60 个字符、描述短于 70、viewport 没有设置 `width=device-width`、缺少 `<html lang>`、没有 favicon、`og:image` 是相对地址(爬虫无法抓取)、`og:image` 声明尺寸不是卡片的 1.91 比 1、`og:url` 与 canonical 不一致、没有 `twitter:card`、标签写了两遍、JSON-LD 解析失败、没有 `<h1>` 或有多个、图片没有 `alt`。

这个页面拒绝编造的一个数字是标题的像素宽度。Google 按像素宽度截断结果,而能放下多少字符取决于字母:六十个 `i` 和六十个 `W` 宽度不同。所以这里的计数是精确字符数,截断标记放在通常引用的建议位置,页面也说明它在做两者中的哪一种。

顺序就是修复顺序:标题、描述和 canonical 在前,卡片随后,如果粘贴的是整页而不是只有 head,正文检查最后。全部二十项通过的页面并不会因此获得排名:这些标签没有一个是单独的排名因素。

sitemap.xml:什么该放进去,爬虫会怎么处理

`<loc>` 必须是绝对地址,生成器会点名拒绝其他内容并给出行号,而不是写一个含相对路径的文件然后祈祷。地址后面可以跟 `<lastmod>`、`<changefreq>` 和 `<priority>`,按这个顺序,页面也按 schema 列出的顺序写出。写了两遍的 URL 第二次会被丢弃并报告;sitemap 无法字面承载的字符——非 ASCII 和空格——会被百分号编码,报告会说明哪些地址被改过,因为 `%C3%A9` 是读者应该知道的变化。

两个限制是真实且会检查的:一个文件 50,000 个 URL 和未压缩 50 MB。超过之后爬虫只读文件的一部分就停,所以报告会说明,并建议使用 sitemap 索引。附加字段的价值就是它们实际的价值,页面会说明哪个是哪个:`lastmod` 在准确时会被相信,而每个 URL 都写“今天”会教会爬虫忽略这个字段;`changefreq` 和 `priority` 被 Google 完全忽略。sitemap 不会让页面被爬取——已经抓取的页面上的链接才会。它只是说这个地址存在。

robots.txt:两行看起来相同、含义相反

后面什么都没有的 `Disallow:` 允许一切。`Disallow: /` 阻止一切。两者看起来都像规则,都只有一行,而第二行已经让真实站点退出过搜索。生成器和页面上的解释来自同一份行列表,所以表格不可能描述文件没有说的东西,每一行的含义都印在旁边:哪些路径被阻止、如果 `/` 出现在那个列表里会怎样、以及 `Sitemap:` 行为什么在那里。

文件是请求而不是访问控制,而且它是公开的:里面列出的路径,就是爬虫现在知道的路径。它还按主机生效,所以子域名需要自己的文件,同一个站点同时用 `http` 和 `https` 提供时也需要。提供 `Crawl-Delay` 是因为这个指令存在且有些爬虫会读,同时诚实说明 Google 忽略它,真正的速率限制属于爬虫自己的控制台。

示例

示例使用页面自带的默认输入,只改设置;下面的结果与你在页面上看到的完全一致。

示例页面,按爬虫的方式读取

按爬虫的方式读取

没有待修复项

18/20 项检查通过,2 项值得一看。分享卡片由 Open Graph 构建。

标题: 57 个字符 · 描述: 146 个字符 · 通过检查: 18 / 20 · 分享卡片: Open Graph

示例 head 有十八项检查通过,两项值得看一眼:一张图片的 `alt` 为空,以及一个从未声明高度的 `og:image`——所以仅凭页面无法检查形状。

完全没有 Open Graph 标签的页面

粘贴页面源代码: <html lang="en"><head><title>A page</title><meta name="description" content="A description that is long enough to be useful in a search result, and no longer than the guidance either."></head><body><h1>A page</h1></body></html>

按爬虫的方式读取

待修复 2 项

9/19 项检查通过,8 项值得一看,其中 2 项是页面几乎不能缺少的。分享卡片由 只有标题和描述 构建。

标题: 6 个字符 · 描述: 106 个字符 · 通过检查: 9 / 19 · 分享卡片: 只有标题和描述

卡片检查失败:一个 `og:` 标签都没有时,分享链接只是一个裸地址,每个平台都在猜旁边该放什么。

canonical 与 noindex 互相矛盾

粘贴页面源代码: <head><link rel="canonical" href="https://example.com/"><meta name="robots" content="noindex, follow"></head>

按爬虫的方式读取

待修复 4 项

4/18 项检查通过,10 项值得一看,其中 4 项是页面几乎不能缺少的。分享卡片由 只有标题和描述 构建。

标题: 0 个字符 · 描述: 0 个字符 · 通过检查: 4 / 18 · 分享卡片: 只有标题和描述

一个说这个页面才是算数的地址;另一个说把它排除在索引之外。这一对被报告为它实际构成的失败,而不是两项通过的检查。

把示例地址列表构建成 sitemap

要做什么: 从地址列表构建 sitemap.xml

Sitemap

4 个 URL

从 4 个可用行构建。文件为 620 B,远低于单文件限制。

写入 URL: 4 · 拒绝行数: 0 · 重复写入: 0 · 百分号编码: 0

四个 URL,其中三个带自己的日期、changefreq 和 priority:没有带的那一个采用默认值。文件不到一千字节。

含一行无法使用地址的列表

要做什么: 从地址列表构建 sitemap.xml · 地址,每行一个: /about/ https://example.com/ https://example.com/ 2026-02-30

Sitemap

1 个 URL

从 1 个可用行构建,其中 1 行被拒绝,1 个重复写入。文件为 163 B,远低于单文件限制。

写入 URL: 1 · 拒绝行数: 1 · 重复写入: 1 · 百分号编码: 0

相对地址连同行号被拒绝,不在日历上的日期被丢弃并附注——URL 本身仍然写出,因为地址没有问题。

阻止两个文件夹的 robots.txt

要做什么: 构建 robots.txt · 爬虫可以做什么: 阻止我列出的路径

robots.txt

0 条路径

每个路径以下面某一行开头的地址都会被阻止。

覆盖爬虫: 全部 · 已阻止: 0 条路径 · Sitemap 行: 是 · Crawl-Delay: 无

每一行都有解释:`Disallow: /admin/` 阻止什么、`Sitemap:` 行为什么与权限无关,以及空的 `Disallow:` 本来会意味着相反的意思。

常见问题

我粘贴的页面会被上传到任何地方吗?

不会。源代码由运行在你浏览器标签页里的固定规则读取,页面背后没有端点,它唯一发出的请求就是加载页面本身。这才使得把 staging 页面、面向客户的页面或软发布中的页面粘进来是合理的。这个页面的静态副本是在生成页面时根据示例文档计算出来的,所以关闭 JavaScript 的访客仍能看到一次真实读取,而不是空盒子。

为什么不给一个 URL 让它自己抓取页面?

因为那需要服务器,而服务器正是这个站点没有的东西:这里的每个工具都在浏览器里运行。这是一个真实限制,并且被明说而不是隐藏——按 Ctrl+U 粘贴源代码,或者只粘贴 `<head>` 部分,如果你只想检查那里。粘贴而不是抓取还有第二个好处:你粘贴的内容,就是不执行 JavaScript 的爬虫收到的内容,而它常常和你的浏览器渲染出来的不是一回事。

搜索结果预览有多准确?

文本是准确的,截断是建议值。这个页面显示的是你的标题、地址和描述按结果排版摆放的样子,截断标记在 60 和 155 个字符处,这是通常引用的数字。Google 按像素宽度截断,Arial 20px 能放下的 `i` 比 `W` 多,所以 65 个窄字母的标题可能完整保留,而 55 个宽字母的标题会被切。因为这取决于字母而不是计数,本页精确报告计数,并拒绝打印一个只能靠猜的像素数字。

我应该给 sitemap 加 changefreq 和 priority 吗?

它们是可选的,Google 两个都忽略,所以诚实的答案是它们在那里不花成本,也买不到东西。`lastmod` 是唯一值得弄对的:准确时它会被使用,而每个 URL 都写“今天”的 sitemap 会教会爬虫不信任这个字段,这比省略更糟。页面三项都提供,是因为协议里有它们,而且有些其他爬虫会读;它说明哪个是哪个,而不是暗示它们同样重要。

robots.txt 能把页面从 Google 移除吗?

它能阻止守规矩的爬虫抓取,这通常会让页面随时间退出索引——但 `Disallow` 不等于 `noindex`,两者一起用是经典陷阱:不被允许抓取的爬虫也看不到页面里的 `noindex`,所以页面可能留在索引里却没有描述。要移除页面,请使用 `noindex` 并允许抓取,或者使用搜索引擎自己的移除工具。这个页面打印文件的每一行做什么,正是为了这个原因。

工具会检查我的 Open Graph 图片吗?

它会检查所有能从文本知道的东西:地址是绝对的,所以爬虫能抓取;以及声明的 `og:image:width` 和 `og:image:height` 是否符合卡片大约 1.91 比 1 的形状。它也会直说没有下载图片,因为它没有服务器去下载。一个 404 文件、一张 5 MB 的照片,或一张会在白底上渲染的透明 PNG,对这次读取来说看起来都一样,而对看到卡片的人来说完全不同。

我的站点是单页应用,这能告诉我什么有用的东西吗?

它告诉你一个不执行 JavaScript 的爬虫看到什么,而这是问题中更难的一半——值得知道,因为构建分享卡片的爬虫根本不运行 JavaScript。如果标签是页面的脚本在加载后加上的,请粘贴渲染后的源代码(检查器里的“copy outerHTML”,而不是 Ctrl+U),并记住社交爬虫看到的是没有这些标签的版本。诚实的修复是服务端渲染或预渲染标签。

资料来源与统计口径

  • 页面读取 Open Graph、Twitter Card、canonical 与 JSON-LD,并生成 sitemap.org 规则下的站点地图。
  • 检查是固定清单:标题、描述、canonical 为失败,其余为警告。
  • 页面不抓取网址、不下载图片;粘贴内容只留在浏览器。

最近复核于 2026-09-17.

本页在您的浏览器本地运行,请保留原文件备份;不涉及财务建议。 阅读完整免责声明。