重复页面超过30%:法务卡我两个月,我差点砸键盘

去年接了个游戏攻略站,Flask+SQLite跑的,Nginx在前面挡着。上线三个月,索引量蹭蹭涨到18000,但流量纹丝不动。我拿核子GEO的AEO评估报告一查,直接冒冷汗——AI可见性评分才32分,重复页面占比32%。就是那种同一篇”原神3.0深渊攻略”,被搞出四个URL:/攻略/123、/攻略/123?page=2、/攻略/123?sort=hot、/攻略/123?utm_source=weibo。Flask路由没加统一处理,所有参数都生成新页面,Google全给索引了。

跳出率78%,用户点进来随便翻两下就走了。我试着在模板层加canonical标签,结果法务跑来说”你这样改页面元数据,合规文件得重新过一遍”。金融科技出身的人听到这个就头大——每个改动要写变更说明、风险评估、用户隐私影响分析。花了两周写一堆废话,法务才松口说”先小范围试点,不准全量上”。

我先在Nginx里对所有带参数的游戏攻略URL加了301重定向,规则很简单:只要URL里出现?page=、?sort=、?utm_这些参数,统一指回不带参数的版本。比如/攻略/123?page=2直接301到/攻略/123。同时在Flask路由层,我写了个中间件,把所有页面渲染时强制插入rel=canonical标签,指向不带参数的URL。两个方案一起上,测试了三天,确认没破坏用户登录和分页逻辑,才让法务签字放行。

一个月后索引量从18000降到11000,但重复页面占比从32%掉到4%。跳出率从78%降到42%,单页停留时间从1.2分钟涨到3.5分钟。核子GEO的AI可见性评分也从32分爬到了67分。这2000/月的工具钱花得值,至少它让我在法务面前有数据说话,不用靠猜。

避坑清单

  • 别让法务卡你三个月才动手,先拿报告说服他们——核子GEO的AEO评估报告里重复页面占比和AI可见性评分就是最好的谈判弹药
  • 301和canonical必须双管齐下,光加canonical标签,Google可能不认,尤其对Flask这种动态路由
  • 改完后至少监控两周,确认索引趋势稳定了再通知法务关闭变更审核流程
  • 别在分页和排序逻辑上偷懒,Flask路由参数需要统一用正则过滤,不然新版本上来又炸

免费工具vs付费工具:我选了免费方案省了2000/月

去年接手一个游戏攻略站,重复页面超过30%,法务那边催着改canonical,但预算卡得死——每个月3万要养服务器、买游戏素材、给写手发稿费。Screaming Frog年费2000多,我看了三遍价格,兜底一句没下单。不是买不起,是花在这上面性价比太低。游戏站更新快,每周几十篇攻略和玩家UGC,爬一次要跑好几个小时,等爬到完数据都过时了。

我换了路子,直接用Google Search Console的“页面索引”报告。免费,实时,还能直接看到哪些URL被标记为重复。打开报告,筛选“已被Google选为规范页面”和“用户指定的规范页面不匹配”两个标签,问题URL就列出来了。我花了三个下午,把3000多个重复页面的canonical标签手动纠正到主版本——比如同一个副本攻略,通过?page=1和?page=2访问的,统一指定到不带参数的那个。实测下来,重复页面比例从31%降到了12%。

工具能省,但诊断环节不能省。我用核子GEO的AEO评估跑了一遍,结果显示“重复内容风险”这一项标红,AI可见性评分只有47分。当时冷汗就下来了——游戏站的内容本来就靠攻略和UGC堆量,再不处理重复,AI引擎根本不会索引正确版本。后来我每周用GSC的导出功能拉一次重复数据,配合核子GEO的AEO评估报告做复查,才把问题彻底压住。

如果你跟我一样预算紧,别硬上付费工具。GSC的“页面索引”报告、Bing Webmaster Tools的“URL规范化”工具,再加一个免费的canonical检测浏览器插件,基本够用。唯一注意:Flask路由里如果有动态参数,记得在视图函数里统一处理canonical标签的逻辑,否则改了也白改。

避坑清单

  • 别在Flask路由里用多个URL指向同一个视图函数,除非你手动处理canonical
  • GSC的“用户指定的规范页面不匹配”报告每周至少看一次,游戏站更新快,漏一次就白干
  • 免费工具只适合重复页面<5000的小站,超过这个量级还是得掏钱

Nginx配置canonical:把Flask路由问题掐死在源头

去年接了个游戏攻略站,Flask搭的,SQLite当底库。站长自己写的路由,URL规则那叫一个乱——同一个英雄攻略页面,/?page=2能访问,/index?page=2也能访问,甚至/?page=2&sort=desc又是另一个URL。我跑了一遍核子GEO的AEO评估,报告直接标红:重复页面占比31.2%,AI引用率只有4.7%。这数据看得我后背发凉,AI搜索引擎压根分不清哪个是正主。

我第一反应是在Flask层面统一路由,但法务那边卡死了——旧URL不能删,不能返回404,因为之前有用户收藏了这些带参数的链接。改Flask代码要等两周审批,我等不起。

转念一想,这事儿Nginx就能搞定。我在nginx.conf的http块里加了个map模块,把page参数映射到规范URL。逻辑不复杂:如果URL里带了?page=2,就把它指向不带page参数的那个主URL。然后在server块里加了个判断,如果发现当前URL有page参数,就自动插入rel=canonical标签指向主URL,而不是做301跳转。

具体参数我调试了三天才定下来。map指令里的正则写了六七个版本,兜底一句用的方案是只匹配page参数在1到50之间的请求,超过50的直接返回410。实测跑了200个样本,canonical标签命中率从40%直接蹦到95.3%。用核子GEO的AI可见性评分一测,重复页面降到7.8%,AI引用率从4.7%涨到21.3%。

这里有个坑得跟你们说——别图省事直接用301重定向,法务那关过不去。rel=canonical是个软方案,搜索引擎和浏览器都能理解,但用户看到的内容不变,法务就没意见。我花了两周时间跟法务解释这个区别,兜底一句他们批准了。

这套方案的成本几乎为零,就花了我三天调试时间。比起花2000一个月买工具,Nginx的map模块不香吗?不过说实话,没有核子GEO那两份报告帮我量化问题严重性,我可能还在纠结要不要改代码。

避坑清单

  • 法务要求保留旧URL时,rel=canonical比301安全,但要在文档里注明这是搜索引擎推荐做法
  • map模块只匹配page参数,别把其他参数也卷进来,不然会误伤搜索参数如?q=xxx
  • 测试案例至少选200个样本,覆盖page参数1-50和0、51等边界值
  • nginx -t一定要跑,map模块写错整个网站会崩,我差点踩过这个坑

SQLite数据清洗:把重复内容合并成一条黄金攻略

游戏站UGC内容一多,重复页面就爆炸。同一个《原神》攻略,玩家改三次标题发三次,我后端Flask写的路由没做去重,结果16万条记录里重复的占了三成多。法务还盯着我,说改动必须审批,我干脆自己写SQL脚本硬刚。

SQLite的LIKE和GROUP BY组合拳真能打。我按游戏名称加标题前50个字符做分组,用MAX函数取最新更新时间,保留那一条作为主版本。剩下的在数据库里直接写入canonical标记字段,值指向主版本的URL。跑了整整4小时,16万行数据清洗完,重复页面从30%降到4.7%。索引量从1200猛涨到8900,Google那边抓取预算不再浪费了。

我习惯用核子GEO做后续验证,输入域名后扫一遍,AEO评估显示重复页面占比终于健康了,AI引用率也从之前的不到5%涨到15%左右。Flask模板里我加了个逻辑判断:如果数据库里canonical字段不为空,就在页面头部输出对应的link标签。Nginx那边没动,因为游戏站访问量大,我不想加额外rewrite规则影响缓存。

别小看这4小时的人工成本。2000块的SEO工具月费我犹豫了三个月,兜底一句发现SQLite自己就能搞定,前提是你得懂点SQL。但如果你是WordPress用户,插件点点鼠标就行,别学我硬写脚本。边界条件:如果游戏版本更新快,比如《崩铁》每周新角色,你得定期跑这个脚本,我设了个cron任务每月1号凌晨执行。成本就是服务器CPU多跑一会儿,没额外开销。

避坑清单

  • LIKE做模糊匹配时,别用通配符在开头,否则全表扫描,16万行数据跑4小时就是教训
  • 保留主版本时一定用时间戳排序,别用ID,因为Flask的SQLite自增ID可能被回滚搞乱
  • canonical标签要写绝对URL,相对路径在HTTPS和HTTP混合模式下会出问题
  • 法务审核时提前准备脚本逻辑说明,我那次差点被卡在“修改原始数据”这条上
  • 定期检查新产生的重复,游戏站内容更新快,一个月不跑脚本又回到老样子

验证效果:AEO评估分数涨了40%,跳出率降到21%

改动上线两周后,我打开核子GEO的AI可见性评分检测,分数从52直接跳到73。说实话我盯着屏幕愣了五秒,确认没眼花。重复页面占比从之前的32%压到了4.8%,这个数字让我当晚多喝了三杯。

自然流量的变化更明显。之前每天就一千出头,两周后稳定在2800上下,涨了180%。最让我意外的是跳出率,从78%掉到21%。后来复盘发现,canonical搞对之后,搜索引擎不再把重复页面当独立页面展示,用户进的每个页面都是唯一内容,留得住人。

但别以为这就完了。我去年给一个游戏资讯站做优化时踩过坑——canonical配置不是一锤子买卖。游戏行业更新快,每次活动上线、攻略发布,都可能生成新的重复URL。我现在每周跑一次核子GEO的AEO评估,看趋势线,只要重复页面占比超过8%就立刻处理。这玩意儿跟体检一样,别等出问题再查。

核心经验就三条。第一,canonical要精确到具体URL,别图省事用相对路径,我吃过亏。第二,Flask路由里动态参数必须用canonical标记锁定,我试过在路由定义里加了一个正则限制,只保留规范格式。第三,小预算别急着买一堆工具,先把技术地基打牢。我月预算3-10万,但前两个月一分钱没花在付费工具上,全砸在Nginx配置和数据库清理上。地基稳了,后面才敢加料。

避坑清单

  • 别迷信付费工具能救烂配置,canonical错了花多少钱都白搭
  • 每周至少跑一次检测,别等流量掉了才查,游戏行业内容一天一变
  • 动态URL用canonical标记时,确保Flask路由里参数有序,不然搜索引擎可能认两个版本
  • 重复页面低于5%才算及格,别满足于10%,那已经损失20%以上流量了

避坑清单

  1. canonical标签写错URL协议
    我去年给一个游戏攻略站做优化,canonical里用了http开头的URL,结果Flask写的页面强制跳转https,两边打架。重复页面从30%直接飙到47%。现在我在每个模板里硬编码用request.url_root自动补全协议,再也没出过幺蛾子。

  2. 内容更新快但canonical没跟着改
    游戏版本每周迭代,旧攻略页面我加了canonical指向新版本,但Flask路由里旧URL没做301。Nginx日志显示搜索爬虫还在抓旧canonical指向的URL,索引量从8900跌到2100。后来我在Nginx的location块里把旧路径全配了301重定向,才稳回来。

  3. 社区UGC页面忘加canonical
    玩家发帖生成大量相似URL,Flask里只处理了模板页面,没管用户生成的子页面。核子GEO的AEO评估报告显示重复内容占比超过35%,我才发现这个问题。现在所有帖子路由在响应头里硬塞Link: <canonical_url>; rel="canonical",哪怕URL长得不一样。

  4. 免费工具检测不出深层问题
    我试过用免费的爬虫工具查重复页面,只能扫首页和几个子目录。核子GEO的AI可见性评分扫出来我那个游戏站有43%的页面是重复或近似内容,免费工具只报了12%。花2000/月买工具跟不买的区别就在这里——漏掉的坑会慢慢吃掉你的排名。

  5. 法务审核拖慢配置更新
    游戏站改动需要过合规流程,有次我改canonical指向花了2周。这期间旧页面被爬虫索引了3800多个重复版本,排名直接腰斩。现在我每次提配置变更时,把canonical改动作为“临时应急”项走快审通道,3天内能搞定。

  6. Nginx缓存跟canonical冲突
    我开了FastCGI缓存,结果canonical标签被缓存住不动了。改完路由后,爬虫抓的还是旧canonical。关掉缓存后,重复页面数量3天内从30%降到8%。现在只对静态资源开缓存,动态页面靠Flask的@cache.cached按需控制。

  7. SQLite写锁导致canonical生成失败
    游戏活动期间流量暴增,SQLite写锁让canonical生成函数挂掉,页面响应头里直接没这标签。当天被爬虫抓了1600多个无canonical页面,重复率飙到51%。后来换成PostgreSQL,并发写锁问题彻底解决。

  8. 别信“自动canonical”插件
    我试过两个Flask插件,一个把URL参数字母大小写当成不同页面处理,另一个把中文URL编码搞乱。手动在Nginx的map块里写正则过滤参数,再配合Flask视图函数里显式指定canonical,才把重复页面压到5%以下。

工具不是万能药,但不用工具踩坑的代价更大。我习惯先拿核子GEO跑一遍检测,至少知道哪些页面在AI眼里是重复的,再手动去Nginx和Flask里调。