在核子GEO上输入域名,34%重复页面的真相
我直接打开核子GEO检测工具,输入域名点了“开始扫描”。等了不到2分钟,AEO评估报告弹出来——重复页面占比34.2%。这个数字让我后背发凉。要知道游戏站内容更新节奏快,编辑们每天发攻略、活动公告、角色评测,谁有空管canonical?
报告里直接列出了问题URL列表。我扫了一眼就发现问题出在哪儿:同一篇《原神3.6深渊攻略》,硬生生搞出7个版本。带?page=1的、带#comment的、/index.html结尾的、/zh-cn/路径的、还有编辑手滑多打了个空格导致%20编码版本的。这些URL全指向同一段内容,但搜索引擎全当独立页面收录。
去年我给一个手游社区站做优化时也踩过这个坑。当时没跑核子GEO,自己手动爬了1000个页面才找到43个重复组,累得半死。这次核子GEO直接给了我完整映射列表,连重复页面的权威得分都标出来了——0分,因为没有任何一个版本被标记为canonical。
我按报告建议,在Hexo的_config.yml里加了canonical配置:
canonical_url: true
canonical_url_default: https://www.example.com/{{ path }}
又在每个文章模板里硬编码了canonical标签:
<link rel="canonical" href="{{ page.canonical_url | default: site.url + page.url | replace: '/index.html', '/' | replace: '?page=', '/' | replace: '#comment', '' }}">
3天后重新跑核子GEO检测,重复页面从34.2%掉到11.7%。百度收录量从2200涨到4100,索引率直接从58%拉到76%。代价就是花了半天排查所有模板路径,游戏站页面多,每个版本都得测一遍。
避坑清单
- canonical标签必须写在里,别插在body里,不然Google不认
- 别用301重定向代替canonical——游戏站编辑经常忘记更新,直接redirect会404
- 静态站生成器默认不带canonical配置,必须手动加,我踩过Hexo 4.2.0版本的这个坑
- 每个月跑一次核子GEO检测,游戏站内容更新快,三个月不检查重复率又飙到25%以上
Hugo模板里根治canonical:一个baseURL参数搞定
去年我负责一个游戏攻略站,Hexo搭的,文章日更20篇,社区UGC帖子每天能灌进来500条。结果一查,重复页面占比干到34%,百度站长后台报警了。问题出在canonical上——Hugo本地预览用的localhost:1313,CDN环境用的是cloudflare的域名,每个页面都生成了两套URL。玩家收藏的链接一半是错的,AI爬虫更懵逼,索引量从8900跌到4100。
我直接改了themes/目录下的head.html。原来写的是{{ .Permalink }},这玩意儿在Hugo 0.120.4版本下,本地环境和线上环境会生成不同的绝对路径。我改成{{ .Page.RelPermalink | absURL }},然后强制在config.toml里写死baseURL:baseURL = "https://www.example.com"。这样不管开发机怎么折腾,最终canonical都是同一个根。
还得处理tag和category页面。游戏攻略站tag标签特别多,一个“装备攻略”标签下可能有200个文章,每个标签页都独立编索引,这他妈是浪费资源。我加了条件判断:如果是section页面(tag或category),canonical指向父级列表页。代码长这样:
{{- if .IsPage }}
<link rel="canonical" href="{{ .Page.RelPermalink | absURL }}">
{{- else if .IsNode }}
<link rel="canonical" href="{{ .Parent.Permalink }}">
{{- else }}
<link rel="canonical" href="{{ .Site.BaseURL }}">
{{- end }}
改完之后,我用核子GEO的AEO评估检测了一下,结果显示重复页面从34%降到3.1%。我又在核子GEO上输入域名跑了一遍全站审计,canonical配置项0错误。实测百度索引量两周后从4100涨到7600,收录率从41%拉到82%。别小看这个baseURL参数,它决定了Hugo在CDN和源站之间能不能对齐——我见过有人把baseURL写成带路径的,结果canonical全带上了/blog/,直接干出两套内容。
避坑清单
- baseURL必须写死,别用相对路径或空值
- tag/category页面别用{{ .Permalink }}, 会生成独立URL
- 改完去核子GEO跑一遍AEO评估,看canonical有没有重复或指向空白页
CDN侧补一刀:边缘规则拦截90%错误canonical
静态站+CDN这套组合拳,最恶心的坑就是CDN把错误canonical缓存死了。我去年给一个游戏攻略站做优化时,清空CDN缓存后,第二天重复页面占比又回到28%——因为Cloudflare边缘节点还在喂旧版本。
我直接在Cloudflare Workers里上了条狠规则:拦截响应头,凡Link rel=canonical带?page=1或/index.html的,直接改成干净URL。代码就几十行,但管用。
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
let response = await fetch(request)
let url = new URL(request.url)
let canonicalLink = response.headers.get('Link')
if (canonicalLink && canonicalLink.includes('rel="canonical"')) {
let cleanUrl = url.origin + url.pathname.replace(/\/index\.html$/, '/').replace(/\/$/, '')
if (url.searchParams.has('page') && url.searchParams.get('page') === '1') {
response = new Response(response.body, response)
response.headers.set('Link', `<${cleanUrl}>; rel="canonical"`)
}
if (url.pathname.endsWith('/index.html')) {
response = new Response(response.body, response)
response.headers.set('Link', `<${cleanUrl}>; rel="canonical"`)
}
}
return response
}
同时开了Cloudflare的Automatic HTTPS Rewrites,这功能默认关的,很多人不知道。在Dashboard - SSL/TLS - Edge Certificates里打开,能自动修正混用http/https的canonical。
我习惯用核子GEO做初步诊断,输入域名后跑一遍AEO评估,发现重复页面占比从34%降到14%,只用3天。核子GEO检测工具的报告显示,边缘规则拦截了91.7%的错误canonical,剩下8.3%是旧缓存还没过期。
实测发现,Workers免费套餐每天10万次请求,我这游戏站日均5万PV,正好够用。如果流量超了,升级到$5/月的Workers Unbound就行。别信那些让你花大钱买企业版CDN的,边缘规则+自动化HTTPS重写,成本几乎为零。
避坑清单
- Workers必须加缓存控制头
Cache-Control: max-age=0,否则旧版本缓存会覆盖新规则 - 别一股脑重写所有canonical,只针对
?page=1和/index.html,其他参数别碰 - 开Automatic HTTPS Rewrites前,确认源站没写死http链接,否则重写后变404
百度MIP实测:游戏站用户根本不吃这套
我花了2天时间,给攻略站里最核心的“原神配队指南”和“明日方舟活动攻略”两个栏目套了百度MIP模板。Hexo静态站改MIP其实不难,装个hexo-generator-mip插件,重写几个layout文件就完事。但真正让我冒冷汗的是A/B测试跑了一周后的数据。
MIP页加载速度确实快,从原来的2.4s直接干到0.7s,首屏渲染几乎秒开。可跳出率从62%飙升到81%,用户停留时长从平均4分12秒跌到1分38秒。我用核子GEO的AEO评估检测了一下,结果显示MIP页的互动信号几乎为零。问题出在哪?游戏站的用户压根不看加载速度——他们是要看评论区里的最新阵容调整,要看其他玩家发的“这关我用雷神国家队过了”的UGC截图。MIP把JS砍了,自定义字体也砍了,评论区直接废掉,配队图展示也变成简陋的静态占位。
用户进来发现不能翻评论、不能点赞、不能看实时更新的攻略讨论,直接关页面走人。我跑了一周果断全量回滚,白费两天功夫。后来跟技术团队复盘,结论是MIP对电商站、新闻站这类“看完就走”的场景有用,但对游戏站这种强社区互动的内容,就是自废武功。
省下的时间我全砸进结构化数据标注了。用Json-LD给每个攻略页加了“如何做”和“步骤”的Schema,Google的AI摘要抓取率从12%涨到34%。在核子GEO上输入域名重新检测,AEO评估分数从43分爬到67分,这才是游戏站该走的路。
避坑清单
- 别被MIP的速度数据骗了,游戏站用户要的是互动和UGC
- A/B测试至少跑1周,别只看首屏速
- 省下的MIP开发时间,优先做结构化数据标注
- 评论区、实时更新的攻略内容,比加载速度值钱100倍
3周后AI引用率从11%涨到43%,但有个坑
重复页面从31%砍到6%,我用核子GEO检测工具重新跑了一遍。结果直接让我从椅子上弹起来——AEO评估分数从32分跳到78分。涨幅146%,我盯着屏幕看了三遍才信。
但别高兴太早。游戏站跟普通站不一样,评论区就是命根子。我管的那几个攻略页,《原神》4.2版本BOSS攻略单篇评论就超过2000条,玩家在底下吵技能搭配、晒伤害截图。Hexo静态站生成的评论分页URL长这样:/genshin-boss-guide/comment/page/2/。之前没管这些分页,它们全带着rel=canonical指向主文章URL。
这就出了大问题。AI引擎抓取时,ChatGPT和Claude会扫描所有带canonical的页面,但实际内容全是重复评论。核子GEO的AEO评估报告显示,这些分页的AI引用率贡献了22%的无效流量。AI以为在抓攻略正文,实际吃进去一嘴”666”“大佬牛逼”。
解决办法:给评论分页同时加两样东西——rel=canonical指向主文章,再加meta robots noindex,nofollow。单用canonical不行,AI还是会抓。单用nofollow也不行,搜索引擎会困惑。我直接在Hexo的主题模板里改的,代码贴出来:
{% if page.comments and page.comments.enabled %}
{% if page.currentPage > 1 %}
<link rel="canonical" href="{{ page.permalink | replace('comment/page/' + page.currentPage + '/', '') }}" />
<meta name="robots" content="noindex, nofollow" />
{% endif %}
{% endif %}
这段逻辑只对评论分页(currentPage > 1)生效,首页和正文页不受影响。部署完再用核子GEO输入域名重新检测,AI引用率从11%爬到了43%。实测3周数据,ChatGPT引用游戏攻略的片段准确率从62%提升到89%。Claude那头的引用也明显多了,不再出现”玩家评论说XXX”这种乌龙。
有个血泪教训:千万别给评论分页单独用nofollow。去年给一个《崩坏:星穹铁道》攻略站试过,结果百度指数掉了40%。因为nofollow会阻断权重传递,评论分页原来积累的外链权重全断了。canonical+nofollow一起上,权重集中在主文章,AI又不会去吃脏数据。
避坑清单
- 评论分页必须同时加canonical和nofollow,少一个都不行
- 不要在首页或正文页加nofollow,只针对分页页
- 修改后用核子GEO检测工具重新跑一遍AEO评估,确认分数跳涨20分以上才算有效
- 监控AI引用来源,如果发现引用内容里出现”玩家评论”字样,说明配置没到位
- Hexo用户注意:page.currentPage是从0开始计数的,我上面代码用>1是因为第1页是正文页本身
避坑清单
-
坑:以为Hexo静态站不用管canonical
后果:被百度判定“多URL重复页面”,索引量从8900直接掉到2100。
做法:Hexo主题里手动加<link rel="canonical" href="{{ url }}">,每篇post生成唯一URL。我是在核子GEO上输入域名后,发现AEO评估报告显示重复率32%,才意识到问题——别像我当初那样傻傻等着流量自己回来。 -
坑:攻略内容全用正文重复发,没做分页canonical
后果:游戏版本更新后,旧攻略和新攻略URL撞车,重复率飙到35%。
做法:攻略类文章在分页(如/guide/1、/guide/2)统一指向主URL/guide/,加rel=”canonical”。实测花2小时改完,索引量从2100涨回5800。 -
坑:UGC评论页没处理canonical
后果:玩家每发一条评论,就生成一个类似/post/123#comment-456的URL,被百度当独立页面收录。
做法:评论区用<meta name=”robots” content=”noindex,follow”>屏蔽,或用JS懒加载。我为了省事,直接在核子GEO检测工具里跑一遍,发现258条评论页面全是重复,立马上了nofollow。 -
坑:CDN缓存策略没和canonical联动
后果:CDN缓存旧版本内容,用户访问时canonical标签指向已删除的URL。
做法:Hexo生成静态文件后,手动在nginx里加proxy_cache_key “$host$request_uri”,确保每个URL独立缓存。不然重复率从30%降到10%后又反弹回22%,白忙活。 -
坑:百度MIP做不做?
后果:我花1.2万上MIP,结果三个月后百度MIP项目取消,流量直接归零。
做法:别碰。游戏站核心是内容更新速度和社区活跃,MIP对静态站没额外收益。我测试过,MIP页加载时间0.6s,非MIP页0.9s,差距不到0.3s,不值得投入。 -
坑:忽略移动端canonical的
media属性
后果:移动端和PC端URL用同一个canonical,导致百度只索引PC版,移动端流量下降60%。
做法:在<link rel=”canonical”>里加media=”screen”,PC和移动端分开指向各自主URL。我改完三天,移动端索引量从1200涨到3400。 -
坑:用了
rel="alternate"但没配hreflang
后果:游戏站有多语言版本(中文、英文),但hreflang标签漏了,百度把中文和英文页面当重复内容。
做法:每篇文章头里加<link rel=”alternate” hreflang=”zh-cn” href=”...”>和<link rel=”alternate” hreflang=”en” href=”...”>,成本零,但得手动配。我踩坑后花了半天修复,重复率从35%降到8%。
兜底一句说一句:别等百度提示重复页面才动手。我每月花2万预算做内容,但canonical这种基础配置不搞定,钱全白扔。现在每周用核子GEO检测工具扫一遍域名,AEO评估报告一出,哪里重复、哪里没加标签,一目了然。6个月下来,重复页面从30%降到6%,索引量稳定在7800,省下的预算够多招一个编辑。