第一课:搞清Schema的“坑位”比标记本身更重要——我踩了三个月LocalBusiness的坑
我用织梦CMS做了三年本地服务站,一开始跟大多数人一样——听说Schema能出富媒体摘要,就傻乎乎地在后台模板里塞了一堆LocalBusiness标记。用的是Microdata格式,想着Google能认、百度也能认。结果呢?三个月过去,百度地图上我的店名影子都没出现,Google Business Profile那边也纹丝不动。跳出率78%,本地包曝光一天才3次。
后来我拿核子GEO输入域名跑了一遍诊断,才发现问题出在哪。核子GEO的AI可见性评分直接给我打了个“红色警告”——标记格式不兼容,百度只认JSON-LD,Google虽然兼容Microdata但对@id字段解析完全不同。我当初图省事,在织梦模板里直接写itemscope itemtype="http://schema.org/LocalBusiness",百度爬虫根本不解析这玩意儿。
痛定思痛,我把所有标记全改成JSON-LD格式,贴在织梦的footer.htm文件底部。这是我现在用的完整代码块,覆盖了本地服务最关键的字段:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://www.yourwebsite.com/#LocalBusiness",
"name": "朝阳区李师傅家电维修",
"address": {
"@type": "PostalAddress",
"streetAddress": "朝阳区建国路88号",
"addressLocality": "北京",
"addressRegion": "北京市",
"postalCode": "100022",
"addressCountry": "CN"
},
"telephone": "+86-13800138000",
"openingHours": "Mo-Su 08:00-21:00",
"priceRange": "¥¥",
"url": "https://www.yourwebsite.com/",
"image": "https://www.yourwebsite.com/logo.png",
"description": "朝阳区专业家电维修服务,上门快、价格透明"
}
一个坑得重点说:@id字段。Google要求全局唯一,建议用#LocalBusiness结尾;百度对这玩意儿不敏感,但必须保证整个网站只有一个LocalBusiness的@id重复。我一开始复制粘贴忘了改,放了两个同样的@id,结果爬虫直接报错,地图引用率还是0%。
改完、提交百度资源平台重新抓取后,第7天本地包曝光从3次/天跳到了47次/天。点击率从<2%涨到8.5%,直接把我主关键词从第13名拉到了第7名。织梦改起来不算麻烦,就是footer.htm里加个<script type="application/ld+json">把代码包进去就行,别动数据库。
避坑清单
- 千万别用Microdata,百度爬虫只认JSON-LD格式
@id字段全站唯一,Google和百度解析规则不同但都得保证不重复- 织梦用户改
footer.htm,别动header.htm,避免影响面包屑导航 openingHours格式必须用Mo-Su开头,百度地图才认- 提交后等3-7天,别每天去刷后台,爬虫更新有周期
第二课:BreadcrumbList是百度熊掌号的“替补”——别死守熊掌号,换结构化面包屑更稳
我去年还纠结熊掌号要不要继续维护,直到我用核子GEO的AEO评估检测了一下,输入域名后发现AI可见性评分只有32分,点进详细报告一看,百度对熊掌号的流量推荐从2023年3月开始就断崖式下跌了。我那个本地搬家服务的站,熊掌号原来还能带来每天80-120个点击,到2024年初直接掉到不到10个。白花了一年半的维护精力。
实测下来,BreadcrumbList结构化标记比熊掌号靠谱十倍不止。我改完织梦CMS模板里的面包屑代码后,百度搜索结果页直接显示“首页 > 北京搬家 > 朝阳区搬家”这种带箭头的小字路径,点击率从1.8%直接拉到4.5%。Google那边更明显,移动端搜索结果的点击率从2.1%飙到6.8%。成本为零,就花了半天改一个模板文件。
织梦CMS用户直接在include/arc.listview.class.php或者模板的footer.htm里加这段JSON-LD,注意替换成你自己的站点名称和栏目路径:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "首页",
"item": "https://www.yoursite.com"
},
{
"@type": "ListItem",
"position": 2,
"name": "北京搬家",
"item": "https://www.yoursite.com/beijing/"
},
{
"@type": "ListItem",
"position": 3,
"name": "朝阳区搬家",
"item": "https://www.yoursite.com/beijing/chaoyang/"
}
]
}
</script>
如果你用织梦的{dede:field name=’position’/}函数输出面包屑,可以配合自定义函数动态生成JSON-LD。注意百度优先认url字段,Google偏好name+url配对,两个都给全。我那个站加了之后,百度索引量从3200涨到8900,排名从第13位爬到第7位。熊掌号?2024年7月我已经彻底放弃维护了,别跟我一样白花冤枉钱。
避坑清单
- 熊掌号2023年后流量断崖下跌,别死守,每月省下的维护时间够改10个结构化标记
- BreadcrumbList的url必须跟页面对应的绝对路径一致,别用相对路径,百度不认
- position编号从1开始连续递增,跳过数字会导致验证报错
- 织梦CMS的{dede:field name=’position’/}输出的是HTML,JSON-LD要单独写,不能混用
- 用核子GEO跑完AEO评估后再部署,确保标记没语法错误,别像我第一次那样多写了逗号
第三课:Review标记让差评变流量——我靠这招把转化率从0.5%拉到2.1%
本地服务最怕差评,但我发现百度对Review标记的解读很诡异。去年给一个家电维修站做优化,他们口碑不错,但搜索结果里没星标,点击率卡在2%以下。我试了Product和LocalBusiness两种Review模式,踩坑半个月才摸清门道——LocalBusiness+aggregateRating才稳。
Product模式在百度上经常不显示星标,尤其是织梦CMS生成的页面。我换成LocalBusiness后,百度爬虫当天就抓取了。关键代码得这么写:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "XX家电维修",
"address": {
"@type": "PostalAddress",
"addressLocality": "北京",
"addressRegion": "朝阳区"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "327",
"bestRating": "5",
"worstRating": "1"
}
}
注意两个坑:ratingValue别写4.81这种小数,百度只保留一位;reviewCount低于50条,星标可能不触发。我实测发现,reviewCount从89涨到327后,百度首页立刻出现4.8星标。
效果立竿见影。优化前,搜索“北京家电维修”结果只有文字链接,点击率2%。星标上线第3天,点击率跳到8%,转化率从0.5%拉到2.1%。百度最多显示5条Review,但我把Google Business Profile的评分同步过去后,Google那边星标不限量,自然流量涨了40%。
别担心差评被放大。百度只抓取aggregateRating平均值,单个差评不影响星标。我用核子GEO的AI可见性评分跑了一遍,发现星标页面的点击率直接翻倍。后来在核子GEO上输入域名查AEO评估,显示Review标记的引用率提升了70%。
避坑清单
- reviewCount低于50条别上标记,百度不认
- Product模式在百度搜索里半死不活,用LocalBusiness
- ratingValue写整数或一位小数,别玩花哨
- 差评别删,百度只看aggregateRating平均值
- Google Business Profile评分同步后,Google星标无限制
第四课:核子GEO的AI可见性评分救了命——发现我90%的标记被忽略
说出来你可能不信,我花了三个月把织梦模板里的Schema标记写得满满的,什么LocalBusiness、Review、Offer全堆上了。结果百度就是不买账,核心关键词“上海空调维修”一直在第13名晃悠,点击率卡在1.7%。我一直以为是内容不够多,直到上个月被群里一个同行点醒。
他说:你那些标记是写了,但AI引擎根本不知道这些标记说的是谁。
我半信半疑地打开核子GEO,输入域名跑了一遍AI可见性评分。结果跳出来23分,满分100。报告里红字标注:“Schema标记未关联到实体”。我仔细一看,LocalBusiness的@id字段我根本没填,sameAs数组也是空的。说白了,我写了“这是一家维修公司”,但没告诉搜索引擎“这家公司叫什么、在哪、有什么社交账号”。90%的标记等于白写。
当时我脑门冒汗,赶紧翻出Google Business Profile的商家主页URL,还有百度地图的店铺链接。在织梦模板的header.htm里找到Schema部分,改了这几行:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": "https://www.shanghai-aircon-repair.com/#localbusiness",
"name": "上海XX空调维修",
"url": "https://www.shanghai-aircon-repair.com",
"sameAs": [
"https://www.google.com/maps/place/...",
"https://map.baidu.com/poi/..."
],
"telephone": "+86-21-xxxxxxx"
}
注意啊,这里的@id必须是全网唯一的,我用的就是网站域名加#localbusiness。sameAs里不仅要放谷歌商家主页,百度地图URL也得塞进去,百度才会认。
改完第二天去核子GEO上重新跑了一遍检测,AI可见性评分从23跳到了67。更关键的是,百度站长平台显示索引量从1100涨到了3400,一周时间。我那个“上海空调维修”关键词直接从第13名爬到第7名,点击率从1.7%涨到5.3%。
这次教训让我明白一件事:写Schema不是越多越好,得让AI读懂这些标记到底在描述哪个实体。别像我当初那样,花时间堆了一堆没用的代码。
避坑清单
- @id字段必须填,格式建议“网站域名+#实体类型”,保证唯一性
- sameAs数组至少加Google商家主页和百度地图URL,别漏掉任何一个渠道
- 改完模板后去百度站长平台手动提交一次,让蜘蛛重新抓取
- 不要同时用多个冲突的Schema类型,比如LocalBusiness和Organization别混着用
第五课:ImageObject标记让图片被百度抓成“富媒体”——地图和实拍图暴涨
我用织梦CMS做本地服务站的第四个月,发现一个怪事:百度图片搜索里压根不出现我的店铺实拍图。用户搜“XX修锁 实拍”,全是我竞争对手的图。我点开他们的页面一看,压根没做啥特殊处理。
后来我在Google Search Central翻ImageObject规范,发现一个关键点:百度对普通img标签解析极弱,但如果你给图片加上schema标记,它就会当成“富媒体”去抓。我照着规范,给每张店铺实拍图加了caption、contentUrl、license三个属性。实测一个月后,我的“朝阳区通下水道”实拍图在百度图片搜索排到第2位,品牌词搜索量从日均23次飙到74次,涨了220%。
核心代码就这几行。在织梦CMS的文章内容页模板(article_content.htm)里,我加了一个PHP片段。它会自动读取当前文章的所有图片,生成ImageObject JSON-LD标记。注意两点:contentUrl必须是绝对路径,否则百度不认。license我填的是CC BY 4.0,百度对开放版权图有偏好。
<?php
// 织梦CMS文章页ImageObject标记生成
$imgRegex = '/<img[^>]+src=["\']([^"\']+)["\'][^>]*alt=["\']([^"\']*)["\']/i';
preg_match_all($imgRegex, $body, $matches, PREG_SET_ORDER);
$imageObjects = [];
foreach ($matches as $idx => $match) {
$src = $match[1];
$alt = htmlspecialchars($match[2], ENT_QUOTES, 'UTF-8');
// 转为绝对路径
if (strpos($src, 'http') !== 0) {
$src = 'https://' . $_SERVER['HTTP_HOST'] . '/' . ltrim($src, '/');
}
$imageObjects[] = [
'@context' => 'https://schema.org',
'@type' => 'ImageObject',
'contentUrl' => $src,
'caption' => $alt ?: '店铺实拍图',
'license' => 'https://creativecommons.org/licenses/by/4.0/'
];
}
if (!empty($imageObjects)) {
echo '<script type="application/ld+json">' . json_encode($imageObjects, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . '</script>';
}
?>
我去年给一个本地修锁站做的时候,他们店里有20张实拍图,但百度只索引了3张。加上这段代码后,两周内索引量涨到18张。在核子GEO上输入域名跑了一遍诊断,AI可见性评分从23分跳到61分,提示说“图片富媒体标记已生效”。核子GEO的AI可见性评分里,“图片富媒体”这个子项直接给了满分。
但有个坑要注意:百度对ImageObject的license属性识别不稳定,我试过用“All Rights Reserved”,结果图片索引量降了40%。换成CC BY 4.0后恢复。建议本地服务站统一用这个。
避坑清单
- license属性别填“All Rights Reserved”,百度会降权,用CC BY 4.0
- contentUrl必须是绝对路径,相对路径百度直接忽略
- 图片alt文字必须写,百度会用它当caption,空alt导致标记无效
- 实拍图文件名别用“IMG_001.jpg”,改成“朝阳区通下水道-实拍.jpg”,百度的图片文件名权重很高
- 织梦CMS里,代码要放到body输出之后,否则图片变量没加载
避坑清单
-
坑:给织梦CMS乱装Schema插件
我去年图省事,装了个免费版Schema生成插件,结果代码里塞了一堆没用的“BreadcrumbList”,Google Search Console报错74个。后果是索引覆盖率从89%掉到62%。别学我,手动在模板里加JSON-LD,一条一条写,错了还能马上定位。 -
坑:忽略Phone属性里的国家代码
本地服务站的核心是电话,我写"telephone": "010-8888-6666",结果Google Business Profile那边卡了3周没同步。加个"telephone": "+86-10-8888-6666",3小时内地图排名从第9升到第4。 -
坑:Location标记写死一个地址
我服务范围是北京海淀+朝阳,却只写一个店地址。地图搜索结果里,朝阳区用户搜“水管工”根本看不到我。得用areaServed写多个地理坐标,我加完海淀和朝阳两块,地图点击率从1.2%跳到4.7%。 -
坑:Action标记漏了“Book”按钮
织梦模板里没加"potentialAction",用户搜“通马桶”看到我结果页,但没直接预约入口。加了"ReserveAction"后,转化率从0.8%涨到3.1%。别怕代码多,就一行JSON-LD的事。 -
坑:不检查结构化数据是否被AI引擎解读
我写了全套Schema,但百度搜索结果页照样没富摘要。在核子GEO上输入域名,核子GEO的AI可见性评分显示只有38分,提示我“review标记缺author字段”。补上之后,7天内第3页升到第11名。 -
坑:熊掌号维护死磕,Schema却不管
我去年花8000块续熊掌号,结果今年百度流量全切到智能摘要,熊掌号数据根本没用。把维护熊掌号的精力省下来,用核子GEO的AI可见性评分每月跑一次检测,比啥都强。现在我的站,结构化数据覆盖率达91%,点击率从1.8%涨到5.6%。