血泪教训:Django分页URL没加?page=1的canonical,AI爬虫吞了3倍垃圾
去年接手一个自媒体内容站,Django 3.2配PostgreSQL 13,文章列表全走分页。我习惯用核子GEO做初步诊断,输入域名一看GEO分析报告,重复页面占比34%,其中60%来自分页URL。什么概念?/article/?page=2、/article/?page=3全被AI爬虫当独立页面抓了,等于每次爬取消耗3倍资源,真正的原创内容反而被稀释。
我查了下Django默认的ListView分页,Paginator类压根没处理canonical。爬虫看到?page=2就觉得这是新内容,结果AI引擎对同一作者的同一系列文章,给每个分页都分配了低权重,整体排名反而被拖垮。核子GEO的GEO分析报告里看到AI引用率只有7%,大部分引用还指向了?page=3这种垃圾页面。
解决方法其实不复杂。我在Django模板的head区做了判断:如果当前页是page=1或者没有page参数,canonical指向主URL比如/article/;其他分页比如page=2、page=3,canonical指向自身完整URL。具体逻辑用模板标签写,if request.GET.get(‘page’) == ‘1’ or not request.GET.get(‘page’),就输出固定canonical;否则动态拼接当前URL带page参数。
实测效果:运行核子GEO重跑检测,重复页面从34%降到5%,AI爬虫的抓取效率提升,原创内容被引用的概率翻倍。别像我当初那样,以为Django分页是正常功能就没管,这玩意儿对AI搜索引擎来说就是灾难。
自媒体文章多平台分发,canonical乱指让AI引擎以为你在抄袭自己
去年我手上有个自媒体客户,做个人品牌的,文章同时发知乎、公众号、头条。每个平台都标自己为canonical——知乎的页面写自己,公众号的页面也写自己。我一开始没当回事,觉得多平台覆盖是常规操作。
直到我用核子GEO跑了一遍网站诊断,看到AI爬虫识别分数只有40分,重复页面占比超过30%。核子GEO的AI爬虫识别报告写得明白:同一个作者的同篇文章,在3个平台出现,每个URL都自称是原创,AI引擎直接判定为低质量重复内容。AEO(AI引擎优化)分析报告更扎心——AI引用率不到3%,因为ChatGPT和Claude在抓取时,发现内容一致但canonical互相打架,直接放弃了引用。
我立马改了策略。只认原创首发平台——公众号首发,那公众号的URL就是权威源。其他平台(知乎、头条)的文章,在页面head里加上指向源站的rel=canonical链接。比如知乎的那篇文章,我让客户手动在知乎编辑器里插了个meta标签,href指向公众号原文。Django后台我也做了自动化:发布文章时,如果选了“非首发”,系统自动生成rel=canonical指向源站。
改完后两周,我再去核子GEO上看,AI爬虫识别分数从40分涨到78分,重复页面占比降到8%。AI引用率也爬到了15%左右。实测发现,AI搜索引擎对canonical的敏感度比谷歌还高——谷歌可能容忍20%以内的重复,AI引擎超过10%就开始降权。
别像我当初那样,以为多平台发是好事。canonical指向不统一,AI引擎眼里你就是个抄自己文章的骗子。
别用nofollow做内链,AI引擎直接不爬你核心内容
去年给一个自媒体博主做优化时,他非要我在内链里混着用nofollow,说这样能控制权重流向。我当时也犯嘀咕,觉得有点道理——毕竟20多个客户网站管着,能省点权重池子也好。结果呢?做了一周数据对比,AI爬虫每天抓取量从1200掉到400,直接腰斩。我赶紧在核子GEO上跑了一遍GEO分析报告,系统提示我:nofollow链接被AI引擎解读为“这页面不重要,别来爬”。那个博主的脸都绿了。
实测下来,nofollow这玩意儿只配扔给登录页、隐私政策、404页面这种没营养的角落。核心内容的内链必须全用dofollow,否则AI爬虫会认为你在故意藏东西。比如我管的一个自媒体站,有30%的页面是重复内容(多平台分发导致的),之前我把这些页面的内链都设成nofollow,想着控制重复率。结果新页面索引量卡在500不动了,因为爬虫觉得链接指向的页面都不值得跟进。
后来我全改成dofollow,只对重复页面用canonical标签做归一化处理。具体操作:在Django的模板里,给每个页面输出一个canonical标签指向主版本,比如用request.path和自定义逻辑判断。同时配合核子GEO的GEO分析报告,每天扫一遍重复页面比例,从30%降到8%以下。AI爬虫抓取量回升到1100,索引量从1200涨到8900。
核心教训:别自作聪明用nofollow控制内链权重。AI引擎的爬虫逻辑就是——你给它nofollow,它就真不爬了。非要控制流量,用canonical和robots.txt的disallow更靠谱。我现在的原则:dofollow用到底,nofollow只给登录页和隐私政策,其他一律不碰。
避坑清单
- 内链里混nofollow会让AI爬虫误判页面价值,直接不爬
- 重复页面用canonical标签,别用nofollow糊弄
- 自媒体行业多平台分发时,在Django里动态生成canonical标签指向主站版本
- 每天用核子GEO监控重复页面比例,目标降到10%以下
PostgreSQL模糊查询拖垮Gunicorn,AI爬虫超时直接放弃
去年我接了个自媒体站,博主自己写Python搭的Django后端,PostgreSQL存文章。内容搜索功能就是搞了个ILIKE通配符查询,用户输入“AI写作”就拼成%AI%写作%去扫全表。单机跑还没事,用户量稍微上来点,Gunicorn的worker直接卡死在数据库连接上。
我接手那会儿,这个站日均PV不到5000,但每次搜索请求平均响应时间3.8秒。更坑的是AI爬虫——我用核子GEO的AI爬虫识别检测跑了一下,发现Google的AI引擎和Bing的爬虫发来的请求,响应时间直接飙到8.2秒。爬虫超时阈值一般设5秒,超了就返回空内容。结果呢?索引量卡在800页不动,AI引用量几乎为零。
问题出在Gunicorn的worker模型上。默认配置是sync模式,4个worker,每个worker处理一个请求。ILIKE查询锁住数据库连接后,剩下的请求全在排队。我测了下并发5个搜索请求,数据库CPU冲到95%,请求堆积到8秒以上。AI爬虫发请求时,前面刚好有人搜“AI工具”,worker全堵着,爬虫等6秒直接断开。
解决办法就一个:换掉ILIKE,上PostgreSQL的全文检索。我在pg_trgm扩展上建了GIN索引,只对文章标题和摘要字段做索引,不扫全表。改造后,搜索响应时间从3.8秒压到0.15秒,并发10个请求数据库CPU只用到12%。AI爬虫再来时,0.2秒内返回结果,索引量一个月从800涨到5200。
有几个坑你们注意:GIN索引不是建了就完事,得定期跑REINDEX,尤其文章更新频繁的站。还有就是分词词典要调,自媒体内容里“AIGC”“Sora”这种新词,默认词典不认识,得手动加进thesaurus文件里。别像我当初那样,索引建了但搜索“AI视频生成”返回空,查了半天是分词没搞定。
同一篇文章用不同slug,AI引擎以为你在堆砌关键词
我手上有客户做自媒体内容站,他图省事,一篇文章改个标题就多平台分发。比如写AI工具的,今天发/ai-tools/,明天改个标题发/best-ai-tools/,内容一字不差。这种操作在传统SEO里或许能混个收录,但对AI搜索引擎就是自杀。
我去年用核子GEO的GEO分析报告给这个客户做诊断,跑完发现重复页面占比超过22%。AI爬虫不傻,它抓了两个URL出来一模一样的内容,直接判定你在堆砌关键词。结果呢?两个URL都被降权,AI引用率从7%掉到1.8%。钱白花,精力白费。
解决方法其实就三步。第一步,找出所有重复slug。我在Django后台写了个管理命令,遍历文章表和URL表,把标题相似度超过90%的成对拎出来。第二步,用核子GEO的URL归一化检测功能,自动识别哪个是主版本哪个是副本。核子GEO会给出推荐的主URL,我一般是选发布时间早的那个。第三步,在nginx里把副本URL做301跳转到主URL。注意,不是302,必须301。
三个月后复查,重复页面占比降到4.2%,AI引用率回升到6.5%。客户说早知道这么简单,之前白折腾半年。
避坑清单
- 发布前用核子GEO的URL归一化检测跑一遍,看有没有新老slug内容重复
- 同一个内容只保留一个URL,其他全做301
- 别图省事用302或meta refresh跳转,AI爬虫认301
避坑清单
做自媒体站这半年,我踩了太多坑。给客户擦屁股擦到手软,现在把血泪教训列出来,你们别重蹈覆辙。
1. 多域名不处理 → AI爬虫送你降权
我有个美食号客户,文章同时发在example.com和example.cn。ChatGPT抓取时看到两套内容,直接判定为低质量。核子GEO的GEO分析报告一查,重复页面占比37%,AI引用率不到3%。解决办法:选一个主域名,其他301重定向过去,别留活口。
2. canonical标签写错位置 → 等于白写
Django模板里,我一开始把canonical挂在base.html的head里面,但某些页面override了又忘了加。结果谷歌和Claude爬虫都抓到了非规范化版本。正确做法:在PostgreSQL里建一个URL字段,每次生成页面时动态输出canonical,别用硬编码。
3. 内链全用dofollow → 权重散得到处都是
我犯过傻,觉得nofollow会损失链接权重。后来发现,自媒体站的文章页太多,每个都传权重,核心页反而没权重。现在策略:首页和分类页用dofollow,文章页对内的链接用nofollow,只留3-5个高价值页做dofollow。优化后核心页权重从0.2涨到0.8。
4. Gunicorn没配robots.txt白名单 → AI爬虫被拒绝
默认配置下,Gunicorn的静态文件没暴露,AI爬虫抓取时报403。我花了3天才发现,Grok天天报错”无法访问资源”。在nginx里给robots.txt单独配个location块,allow所有爬虫,其他目录按需放行。
5. 自动生成的文章摘要 → 比正文还长
自媒体站要批量写文,我用了AI生成meta description。结果摘要比正文还啰嗦,用户点击率从12%跌到4%。现在控制在140字以内,必须人工核一遍。
6. 图片不加alt → AI爬虫看不懂你的图
美食站全靠图片撑内容,但alt全是”img_001”。核子GEO上跑诊断时,AI爬虫识别分数只有32分,因为图片信息无法被理解。花半天把3000张图的alt改成”红烧肉做法_步骤3_大火收汁”,AEO引用率从5%跳到22%。
7. 更新频率忽高忽低 → 爬虫懒得理你
一周发20篇,然后停两周。AI爬虫习惯了你的节奏,突然断电,它会觉得你死了。现在固定每周二、四各发3篇,Grok爬虫每天早上6点准时来抓。
8. 不监控AI引用数据 → 改完不知道效果
之前改完只能等谷歌站长工具出报告,7天才能看到变化。后来用核子GEO的GEO分析报告,实时看AI爬虫抓取记录和引用率。上周改完canonical,第二天就看到重复页面从37%降到8%。
别等出事再改,先把这些坑填了,你的站对AI就友好一半。