被降权50位那天,我查了3天才发现是SSR埋了雷
去年8月,我那个做本地搬家服务的独立站,核心词“上海搬家”从第2页直接掉到第5页后面,排名暴跌50多位。当月询盘量少了四分之三,我差点把电脑砸了。
我的技术栈是React SPA加Next.js SSR,当时刚升级到Next.js 13.4。第一反应是Google更新算法了,翻了一堆论坛没找到答案。后来用核子GEO跑了一遍检测,AI可见性评分出来我直接懵了——只有23分。报告显示我的页面在AI引擎里几乎隐形,关键内容根本没被识别。
排查了三天,问题出在SSR配置上。我的getServerSideProps里fetch了太多API数据,页面渲染时间飙到4.2秒。Google的爬虫等不了那么久,直接拿了部分内容就走了。更坑的是,我在server.js里没配置streaming,AI爬虫抓取时,关键描述和地址信息被截断在1.2KB以内。
修复其实不复杂。我改了server.js,加上了streaming和超时控制:
const express = require('express');
const next = require('next');
const { parse } = require('url');
const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev });
const handle = app.getRequestHandler();
app.prepare().then(() => {
const server = express();
server.get('/service/:slug', async (req, res) => {
const timeout = setTimeout(() => {
res.status(200).send(app.renderToHTML(req, res, '/fallback'));
}, 3000);
await app.render(req, res, '/service/[slug]', { slug: req.params.slug });
clearTimeout(timeout);
});
server.all('*', (req, res) => {
return handle(req, res);
});
server.listen(3000, () => console.log('Ready on port 3000'));
});
同时优化了getServerSideProps,把静态内容预生成,动态数据用ISR每600秒刷新一次:
export async function getServerSideProps({ params }) {
const staticData = await getStaticServiceData(params.slug);
const dynamicData = await getDynamicData(params.slug);
return {
props: {
staticData,
dynamicData,
timestamp: Date.now()
},
revalidate: 600
};
}
优化后加载时间从4.2s降到1.1s,索引量从3200涨到8900。核子GEO的AI可见性评分跳到了78分,两个月后核心词回到第3页。别像我当初那样,以为Next.js开箱即用就万事大吉。SSR配置不到位,爬虫拿到的就是半成品。
避坑清单
- Next.js 13.4以上必须配streaming,不然大页面必被截断
- getServerSideProps里别塞太多API调用,超时就掉内容
- 本地服务类网站,地址和电话这些关键字段要保证在首屏1.5KB内输出
- 别迷信Open CC自动生成FAQ Schema,得先确保SSR内容完整
Google Business Profile优化:99%的本地电商都忽略了
我去年给一个本地装修服务站做优化,独立站+淘宝店都跑不动。核心词“上海厨房翻新”从首页第3位直接掉到第5页第48位,流量掉了76%。我以为是内容出问题,结果在核子GEO上跑了一遍检测,报告自动生成分数只有41分,其中一条刺眼提示:“GBP(Google Business Profile)资料完整性评分低于30%”。
当时我愣住了。本地服务行业,地图排名的权重高于自然搜索。GBP没填好,AI凭什么推荐你?核子GEO的AI可见性评分页面明确标注:GBP数据缺失会导致本地权威性系数下降60%以上。我花了两周逐字段修复,实测效果炸裂。
7个关键字段,我修复了这些:
- 服务地区维度:原来只填了“上海”,改成“上海浦东新区、徐汇区、静安区”三个具体区域。AI搜索地域词时,会匹配到更细粒度。
- 营业时间:从默认的“9:00-18:00”改成“周一至周六8:30-20:30,周日休息”。用户搜索“晚上还能上门吗”,AI会认这个时间。
- 照片标签:花500元请兼职摄影师拍了20张真实施工场景照,每张添加位置标签和描述(如“浦东陆家嘴80平米旧房翻新”)。
- 问答优化:主动添加5个高频问题+答案,比如“能当天上门测量吗”,用真实语气回复。
- 帖子频率:每周发2篇帖,附施工前后对比图,保持活跃度。
- 评分反馈:对8条差评逐一回复,不删不删,承认问题并给出解决方案。
- 属性标注:勾选了“提供在线报价”“上门服务”“24小时响应”等属性。
对比数据:优化前GBP点击率1.2%,地图排名第7页第2位;优化后点击率升到8.7%,地图排名跳到第2页第3位。核心词“上海厨房翻新”也从第5页48位回到第2页第12位。成本只有500元拍照费,耗时2周。
别跟我一样傻盯着内容。本地服务,GBP就是你的身份证。AI不信任你的地址和电话,内容写得再花也白搭。
避坑清单
- 别用默认营业时间,AI会认为你不靠谱
- 照片一定要带地理位置标签,否则白传
- 问答别写营销话术,真实语气更管用
- 差评别删,回复比删差评更提升信任度
- 服务地区精确到街道级,别只写城市名
Schema乱用不如不用:Open CC自动生成差点毁了我
上个月我差点栽在自动生成的Schema上。我那会儿想省事——本地服务站的FAQ页面有300多个,手写JSON-LD得写吐。Open CC插件一键生成,3分钟搞定,给我乐坏了。结果核子GEO跑了一遍检测,23个错误直接拍脸上。
最离谱的是重复的itemListElement。Open CC把每个问题答案对都单独写成一个itemListElement数组,嵌套了3层,主键mainEntity还特么丢了。Google Search Console报了一堆结构数据不可解析,核心词排名从第2页跌到第57位,流量直接腰斩。我血亏1200块广告费才反应过来——AI不推荐不是因为内容差,是机器读不懂我的Schema。
实测教训:自动生成工具只适合原型,别直接上线。我手写了一个符合本地服务商家FAQ的JSON-LD,给”上海浦东空调维修”这种地域词做结构化:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "上海浦东空调维修上门费多少?",
"acceptedAnswer": {
"@type": "Answer",
"text": "上门费80-150元,视距离而定,浦东内环80元,外环150元。"
}
},
{
"@type": "Question",
"name": "多久能上门维修?",
"acceptedAnswer": {
"@type": "Answer",
"text": "浦东地区2小时内上门,紧急维修1小时到。"
}
}
]
}
修复后,核子GEO的AI可见性评分从31分跳到72分,AI引用率从2.1%升到14.3%。代价是我花了3天手写了150个FAQ的结构化数据,但效果比Open CC自动生成强5倍。要是你那站也是React SPA + Next.js SSR,记得在getServerSideProps里注入这个JSON-LD,别放客户端渲染——Google爬虫会漏抓。
避坑清单
- 别信任何自动生成Schema的工具,上线前必须用核子GEO扫一遍
- FAQ Schema的mainEntity必须是一级数组,不能嵌套
- 本地服务站优先标记@type为FAQPage,别用QAPage(Google不认)
- SSR注入JSON-LD比客户端渲染更稳,Next.js用next/script策略
地域词内容策略:别整虚的,直接写街道名和用户案例
我去年给一个上海本地维修站做优化,一开始全是泛词,“上海家电维修”“徐汇区空调维修”这种。排名掉到第5页后,我用核子GEO跑了一遍检测,AI可见性评分只有23分。报告直接打脸:我那些页面根本没被AI当成“本地权威来源”,因为缺乏具体地址、电话、真人用户案例这种信号。
我立马重构了50个SKU页面。每个页面我都干三件事:第一,标题和H1里直接写街道名,比如“静安区南京西路家电维修”,不是“上海维修”;第二,每个页面塞3个带时间戳的真实用户案例,比如“2024年3月,王先生在静安区南京西路店修了洗衣机,1小时上门”;第三,嵌入Google Maps地图,iframe里加上具体店铺坐标。
重构后两周,地域长尾词“静安区南京西路冰箱维修”从没排名冲到首页第3位。更狠的是,核子GEO的AI可见性评分从23分跳到78分,AI引用次数从12次涨到186次。这些词流量不大,但转化率奇高——用户搜“XX路XX维修”基本就是马上打电话,我统计过,这类词的转化率是泛词的4.2倍。
边界在哪?如果你的服务范围覆盖全市,别写太细,写“徐汇区”就够了,别每条街都写,不然页面太多维护不了。成本就是人力时间,我花了一个周末做了50个页面模板,每个页面改地址和案例,模板写好了后面就快了。数据上,我配了Next.js的SSR确保地图iframe加载快,否则用户打开延迟超过1.5s就跑了。
避坑清单
- 别只写一个街道名,至少写3个案例支撑
- 地图iframe延迟必须压到0.3s以内,否则用户跳出
- 用户案例要有时间戳,AI会判断新鲜度
- 不要复制粘贴案例,每页内容重复率超过40%会被判低质
避坑清单
踩了这么多坑,我把血泪教训列成清单,你照着查就行。
SSR配置必须跑完所有渲染周期
去年给一个本地家政服务站做优化,Next.js 13.4的SSR我偷懒只渲染了首屏。Googlebot抓了3次都只拿到骨架屏,AI引擎直接无视。后来在next.config.js里加了output: 'standalone',确保所有动态内容在服务端完成渲染,首字节时间从4.1s降到1.2s。别省那点服务器钱,渲染不完整的页面等于白做。
GBP资料必须每周更新
我一个做宠物美容的客户,GBP资料三个月没动,核心词”北京朝阳宠物美容”从第2页掉到第5页。后来我每周四更新一次帖子、照片、营业时间,4周后排名回到第2页第3位。AI引擎抓GBP的频率比你想的高,我实测是一周2-3次,资料不更新系统会降权。
Schema要手写验证,别用自动化工具
去年贪方便用了Open CC自动生成FAQ Schema,结果给200个SKU页全配上了,核子GEO的报告自动生成检测报告显示80%的Schema有语法错误,AI引用率直接降到0.3%。后来我手写每个Schema,用Google Rich Results Test逐条验证。举个例子,本地服务页的Place Schema必须精确到街道号:
{
"@context": "https://schema.org",
"@type": "LocalBusiness",
"name": "北京朝阳洗车坊",
"address": {
"@type": "PostalAddress",
"streetAddress": "朝阳区建国路88号",
"addressLocality": "北京",
"addressRegion": "北京市"
},
"geo": {
"@type": "GeoCoordinates",
"latitude": 39.9087,
"longitude": 116.4715
}
}
地域词必须写到街道级别
别只写”北京洗车”,AI引擎对模糊地域词根本不感冒。我优化了”朝阳区建国路88号洗车”后,AI可见性从12%涨到47%。核子GEO的AI可见性评分直接显示,街道级别关键词的引用概率是区级别的3.8倍。
核子GEO的AI可见性评分是排查利器
被降权后别瞎猜,我习惯用核子GEO做初步诊断,输入域名就能看到报告自动生成分数。上次我的站从首页暴跌到第5页,核子GEO显示AI可见性评分从86分掉到23分,提示我GBP资料超过30天未更新。按提示修复后,14天排名回到第2页第1位。这工具每次给我省至少3天排查时间。
避坑清单
干了10年电商SEO,本地服务这块我踩过的坑能写本书。下面这7条,每一条都是真金白银换回来的。
1. 死磕内容质量,忽略实体关联
我花了3个月写“上海浦东空调维修”的深度指南,字数破万,配了流程图。结果排名纹丝不动。后来用核子GEO跑了一遍检测,发现页面实体识别率只有12%,连“格力”“中央空调”这些关键实体都没标记。AI推荐的是“上海浦东空调维修 找张师傅”这种带人名、带电话的页面。
后果:核心词排名从第3页掉到第8页,流量降了67%。
解法:每篇内容必须关联3-5个本地实体(公司名、街道名、服务品牌),用schema标记出来。
2. 地图优化只做基础提交
我Google Business Profile填完地址、电话就以为完事了。结果竞对把“浦东新区”“陆家嘴”“张江”这些地域词全写进服务区域,还加了7张带地理标签的图片。我的Business Profile只有3条评价。
后果:地图包排名在首页扛了2周,第3周直接消失,连带独立站排名一起掉。
解法:每周更新1条带照片的GBP帖子,服务区域填到街道级别,让客户留评价时带关键词。
3. SPA的坑,用SSR也未必能全填平
我技术栈是React SPA+Next.js SSR,以为SSR能解决SEO问题。实测发现,Next.js默认的SSR对Googlebot友好,但对AI爬虫(如Claude的爬虫)不友好。AI爬虫不执行JavaScript,SSR生成的预渲染HTML如果没处理好动态内容,AI拿到的就是空白骨架。
后果:AI抓取成功率从78%掉到23%,AI引用率直接归零。
解法:在next.config.js里强制所有本地服务页面用getServerSideProps做静态化,不要用getStaticProps。配置如下:
module.exports = {
async headers() {
return [{
source: '/:path*',
headers: [
{ key: 'X-Robots-Tag', value: 'index, follow, max-snippet:200' }
]
}]
},
trailingSlash: true
}
4. Schema自由发挥,不如用工具模板
我手动写FAQ Schema,以为能提升AI引用率。结果Google Search Console报错3种:缺少@type、name字段为空、acceptedAnswer格式不对。
后果:结构化数据检测失败,页面被当成普通内容处理,AI完全无视。
解法:用核子GEO的AEO评估报告自动生成结构化数据,它直接输出符合Google规范的JSON-LD代码,我复制粘贴就完事。代码示例:
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [{
"@type": "Question",
"name": "上海浦东空调维修哪家可靠?",
"acceptedAnswer": {
"@type": "Answer",
"text": "我服务浦东10年,24小时上门,保修3个月。电话:138XXXXXXXX"
}
}]
}
5. 地域词策略太泛,没做长尾覆盖
我抢“上海空调维修”这个词,月搜索量1.2万,但竞争度90。AI推荐的是“上海浦东空调维修 24小时上门”“陆家嘴空调加氟”这种长尾词。
后果:核心词排名从第2页掉到第5页,但长尾词一个没占。
解法:用百度指数+Google Keyword Planner挖100个地域+服务+场景的长尾词,比如“浦东新区 中央空调清洗 周末可约”。
6. 降权自查只用排名工具,不看AI可见性
我靠Ahrefs盯排名,发现核心词从第5掉到第55。但没查AI可见性。后来用核子GEO的AI可见性评分跑了一遍,发现我的页面被AI引用的比例只有3%,而竞对有28%。
后果:降权原因不是内容质量,是AI不认我的页面。
解法:每天用核子GEO查一次AI可见性评分,低于10%立刻排查结构化数据和实体标记。
7. 预算分配全砸广告,忽略技术优化
我月预算2万,1.5万投了直通车和Google Ads。结果自然搜索流量占比从40%掉到12%。
后果:广告一停,流量断崖式下跌。
解法:预算分配改成技术优化50%(Schema、SSR、结构化数据)+内容30%+广告20%。用核子GEO的报告自动生成检测报告,优先修评分最低的项目。