你在 Google 搜自己的品牌,首页结果上方的那行站名却是错的——只显示裸域名、旧品牌,或者你那一长串公司法定全称,而不是你想要的短名。view-source 看首页,WebSite JSON-LD 块里的值跟可见站点对不上:name 写 "My AI Site",但 logo 和页脚写的是 “AI Productivity Guide”。Google 把 WebSite 结构化数据当作决定搜索结果中**站名(site name)**的最高优先级信号——但只在 name 跟页面上实际可见的内容一致时才采用。
最快修复:把 JSON-LD 的 name 改成跟首页可见品牌(logo 文字、<title>、页脚)字节级一致,确认 url 是你的 canonical 首页,然后在 Search Console 里对首页请求重新抓取(URL Inspection -> Request Indexing)。新站名通常几天到几周内出现。
2026 年还有用的部分(和没用的部分)
WebSite JSON-LD 过去干两件事,现在只剩一件还活着:
| 功能 | 截至 2026 年 6 月的状态 | 该怎么做 |
|---|---|---|
| 站名(首页结果上方那行品牌名) | 有效。 WebSite.name 是 Google 选站名时的最高优先级信号。 | 保持准确——这才是这个块现在还重要的全部原因。 |
sitelinks search box(potentialAction / SearchAction) | 已下线。 Google 已于 2024 年 11 月 21 日全球移除。 | 标记留着无害,但不起任何作用。别再为了 Google 去修搜索 URL 模板。 |
第二行是最大的变化。如果你是来修一个坏掉的 SearchAction.target URL、想让搜索框重新出现的——停下,已经没有搜索框可修了。Google 已彻底移除 sitelinks search box,把对应报告从 Search Console 撤掉,Rich Results Test 里也不再高亮这段标记。把旧的 potentialAction 留在 JSON-LD 里不会触发错误,只是变成了死代码。本文剩下的部分只聚焦还能产生可见结果的那部分:站名。
常见原因
按”实际命中率”从高到低排列。
1. name 用了旧 / 占位 / 太泛的品牌
starter template 自带 name: "My Site" 没人改。或者改了品牌但 JSON-LD 生成器还在吐旧名。Google 也会忽略太泛的名字(“Home”、“Blog”),或者读起来像一长串法定实体(“Acme Productivity Solutions LLC”)而不是短品牌的名字。
怎么判断:
curl -s https://yoursite.com/ | grep -oP '"@type":"WebSite"[\s\S]+?</script>' | grep -oP '"name":"\K[^"]+'
输出跟可见 logo / 页脚名不一样,或者是个泛词,就是这条。
2. name 跟首页可见品牌不一致
这是 Google 自己最强调的原因。结构化数据写 “AI Productivity Guide”,但 <title> 写 “Home | AIPG”,og:site_name 写 “AI Prod Guide”,logo alt 文字又是另一个。信号互相打架时,Google 往往退回到裸域名。
怎么判断: 对比首页这四个值,它们应该是同一个短字符串:
curl -s https://yoursite.com/ | grep -oE '<title>[^<]+|og:site_name" content="[^"]+|"name":"[^"]+'
3. url 与 canonical 的尾斜杠不一致
JSON-LD:"url": "https://yoursite.com"。Canonical:https://yoursite.com/。Google 看到两个略不同的 URL 都声称是站点根。WebSite.url 必须指向你的 canonical 首页,即域名(或子域名)根。
怎么判断: 对比 WebSite.url 跟首页的 rel="canonical"。必须字节级一致、无跳转。
4. WebSite 结构化数据放在子目录而非域名/子域名根
站名只在域名或子域名根上生效。如果你的”站点”在 yoursite.com/blog/,而你把 WebSite 块放在那里,Google 不会为某个子目录单独取站名——子目录站名不被支持。需要不同的名字就用子域名。
怎么判断: 确认 WebSite 块在裸根(/ 或像 /en/ 这样的 locale 根)服务的那个页面上,而不是某个内层路径。
5. inLanguage 与 <html lang> 不一致
JSON-LD:"inLanguage": "en"。HTML:<html lang="en-US">。属于小问题,但也值得对齐,免得两处互相矛盾。
怎么判断:
curl -s https://yoursite.com/ | grep -oE '<html[^>]+lang="[^"]+"|"inLanguage":"[^"]+"'
6. 同页多个 WebSite 块
有些模板从 layout 文件和单独的站级 schema 组件都吐 WebSite。Google 看到一个站点有两个块;如果它们的 name 不一致,信号就被搅浑。
怎么判断:
curl -s https://yoursite.com/ | grep -c '"@type":"WebSite"'
大于 1 就是重复。选一个源,删另一个。
7. @id 引用了遗留域名
"@id": "https://yoursite.com/#website" 没问题。"@id": "https://oldsite.com/#website" 是换域名时留下的,应当改掉。
怎么判断: 看 @id 有没有遗留域名或格式错误。
8. 新域名、品牌认知度弱
如果域名很新,Google 会依赖它还没积累到的站外信号,这时不管标记怎么写都可能显示裸域名。解法是 alternateName 加上耐心(见下面第 4 步)。
最短修复路径
第 1 步:定义单一可信源
在 site.config.mjs 或类似文件里:
export const SITE = {
name: "AI Productivity Guide", // 短、好记、跟 logo 一致
url: "https://yoursite.com", // canonical 首页,别有尾斜杠漂移
inLanguage: "en", // 或 "en-US",匹配 <html lang>
};
第 2 步:从中生成 WebSite 块——只在首页
---
import { SITE } from '../site.config.mjs';
const isHomepage = Astro.url.pathname === '/' || Astro.url.pathname === '/en/';
---
{isHomepage && (
<script type="application/ld+json" set:html={JSON.stringify({
"@context": "https://schema.org",
"@type": "WebSite",
"@id": `${SITE.url}/#website`,
"url": SITE.url,
"name": SITE.name,
"inLanguage": SITE.inLanguage,
})}></script>
)}
注意少了什么:没有 potentialAction / SearchAction。它已经不起任何作用(见上面的表),所以最干净的写法直接不写。已有的留着也无妨,但新标记不需要它。
第 3 步:对齐四个可见信号
首页上,这几个应当是同一个短字符串:
<title>(至少其中的站名部分),og:site_namemeta 标签,- logo 的
alt文字 / logo 旁边的文字, WebSiteJSON-LD 的name。
这里不一致,是 Google 显示裸域名而非你站名的头号原因。
第 4 步:站名还是不生效就加 alternateName
如果正确的名字被忽略——新域名上很常见——给 Google 一些备选。按优先级排序,新站可以把裸域名放在最后兜底:
{
"@type": "WebSite",
"name": "AI Productivity Guide",
"alternateName": ["AIPG", "yoursite.com"],
"url": "https://yoursite.com"
}
别拿 alternateName 去夹带一个 Google 在别处正在拒绝的名字——它必须跟你真实的品牌一致,否则照样被忽略。
第 5 步:删除重复的 WebSite 块
grep -rn 'WebSite' src/layouts src/components
留一个源,其余删掉。
第 6 步:校验标记
部署后,在 Rich Results Test 或 Schema Markup Validator 打开首页。确认 WebSite 类型能解析、无错误,且 name 是你预期的那个。(Rich Results Test 不再标出 sitelinks search box——这是正常的,不是失败。)
第 7 步:请求重新抓取,然后等
在 Search Console 里对首页 URL 跑 URL Inspection,点 Request Indexing。站名变更不是即时的:Google 要重新抓取并重新处理首页,这要几天到几周。站名功能没有任何 Search Console 报告,唯一确认方式是等重抓完成后搜自己的品牌。
如何确认修好了
- 标记能解析: Rich Results Test / Schema Markup Validator 显示
WebSite,name是你想要的,且无错误。 - 只有一个块、值一致: 对线上首页跑
grep -c '"@type":"WebSite"'返回1,且name、<title>、og:site_name、logo 文字读出来都是同一个短品牌。 - 重抓已完成: URL Inspection 显示首页最近一次抓取时间晚于你的部署时间。
- SERP 更新: 几天到几周后,搜你的品牌,首页结果上方显示正确站名。
哪些情况不是你操作错了
即使 WebSite JSON-LD 完美无瑕,Google 选站名是全自动的,会权衡你无法直接控制的站外信号。一个站外提及很少的全新域名,不管标记怎么写,都可能在一段时间里继续显示裸域名。而 sitelinks search box 自 2024 年 11 月起已经彻底没了——再正确的 SearchAction 标记也救不回来,因为这个功能本身已经在 Search 全球范围内被撤掉。
FAQ
- 要不要删掉旧的
SearchAction/potentialAction标记? 不必。它是死代码,不会在 Search Console 报错。新标记直接不写即可。 - 为什么 Google 显示我的域名而不是站名? 通常是不一致(原因 2),或名字太泛 / 太长(原因 1)。对齐四个可见信号、加
alternateName、请求重抓。 - 新名字多久出现? Google 重抓首页后几天到几周。在 URL Inspection 里请求索引加快的是抓取,而不是 Google 的处理。
- 站名有 Search Console 报告吗? 没有。Google 撤掉了 sitelinks-search-box 报告,也从没给站名加过报告——只能靠搜品牌来验证。
- 一页能声明多个
WebSite块吗? 不能。首页上只放一个;互相冲突的块会搅浑站名信号。
预防建议
- 用单一
SITE配置作为站名和 canonical URL 的可信源。 WebSiteJSON-LD 只在首页发(双语站只在该 locale 首页)。- CI 断言:首页有且只有一个
WebSite块,且它的name等于你配置的品牌。 - 改品牌时同步改
WebSite的name,并随后请求首页重抓。 - 新标记别再加
SearchAction——它在 Google Search 里已经不渲染任何东西。