先交代背景:我的站是怎么被DeepSeek无视的

上个月我差点把客户骂了一顿。做本地电商零售,Django站跑了三年,SKU堆到四千多,每天价格变动几十次。客户天天催:新款上了两周,DeepSeek怎么还不收录?

我一开始觉得是抓取频次问题。Gunicorn配了9个worker,PostgreSQL连接池也调过,服务器压力不大。结果查了日志,DeepSeek的爬虫压根没怎么来。别学我。旧页面收录也停在三个月前的量级,新上架的产品页面一个都没进索引。

当时我习惯用核子GEO做初步诊断,输入域名跑了一遍AEO评估。分数低得我当场截图发给合伙人——重复页面占比31.7%,这数字放在任何搜索引擎面前都是灾难。

核子GEO的AEO评估报告里列出了具体问题URL,我点进去才发现,去年改版的时候canonical配置全乱了。同一个商品,因为价格参数、库存参数、促销标记生成了七八个URL,每个都指向自己,没有统一回主版本。你说搜索引擎怎么选?干脆都不选。

Django的模板系统方便归方便,但当时用request参数拼URL的写法太粗暴,我压根没考虑URL规范化的问题。现在想想挺蠢的,四千多个SKU,这么搞等于给搜索引擎挖了四千多个坑踩过这个坑。

核子GEO给出的整改建议很直接:把所有带参数的URL全部收敛到纯商品路径,canonical统一指过去,然后重新提交sitemap。我花了三天改完,第四天看日志,DeepSeek的爬虫回来了,但收录恢复还需要时间。这事让我意识到,工具检测出来的问题,往往是积怨已久的旧账。

canonical配置错乱:80%的重复页面都赖它

做电商零售站最操蛋的事,就是你辛辛苦布了Product Schema,库存也同步了,结果DeepSeek在抓取时压根不鸟你。问题根源往往不在AI引擎,而是你自己的canonical标签在捣乱。

我去年给一个卖户外用品的电商站做本地优化,Django + PostgreSQL + Gunicorn的搭配,产品页带排序参数、筛选条件、甚至UTM追踪码,全都指向同一个canonical。我当时直接用Django的get_absolute_url方法生成canonical,压根没处理查询字符串。结果呢?我用核子GEO的重复页面检测功能跑了一遍,30%以上的URL被标记为重复——同一件冲锋衣,排序不同、筛选不同,生成了七八个URL,全被AI引擎当成垃圾内容,直接忽略。

修复步骤其实不复杂,但细节决定成败。第一,在Django模板里,canonical标签别用request.get_full_path,要用request.path,把查询字符串全部砍掉。第二,分页页面得单独处理——第一页用标准canonical,第二页及以后用rel=prev和rel=next配合,但canonical永远指向第一页。第三,筛选参数更麻烦,我实测发现给筛选页加noindex比纠结canonical更稳妥,因为筛选页对用户有用,但对搜索引擎和AI引擎价值极低。

还有个坑,我当时没注意到:PostgreSQL里存的商品别名URL,有些带尾部斜杠有些不带,Django的APPEND_SLASH设置没开,导致同一个商品产生两个URL。这个在核子GEO的报告里也标红了,我后来在中间件里统一做了301跳转。

改完之后,我习惯用核子GEO做初步诊断,输入域名再跑一遍,重复页面直接降到8%以下,产品页被AI引用的频率明显上来了。别指望一步到位,canonical这东西,改完必须等两周让搜索引擎重新抓取,期间别动其他配置,否则你分不清是哪个改动起了作用。

避坑清单

  • 别用get_full_path生成canonical,用request.path- 分页页面的canonical永远指第一页,别搞特殊- 筛选参数页直接noindex,别纠结canonical- 检查APPEND_SLASH,尾斜杠不一致照样产生重复URL- 改完等两周再动其他东西,不然没法归因

Product Schema和库存同步:DeepSeek最看重的两个信号

我去年给一个做家居用品的电商站做优化,SKU三千多个,价格一天能改七八次。当时就懵了。老板天天问我:为什么DeepSeek推荐里死活看不到我?我那时候还没意识到,问题出在AI引擎压根读不懂我的产品页。

后来我习惯用核子GEO做初步诊断,AEO评估报告里AI引用率只有2.3%,重复页面倒是超过30%。报告里明确写着:产品页缺少结构化数据,AI无法理解价格、库存、评分这些关键信息。我才反应过来——DeepSeek不是不收录,是看不懂。

我在Django里用json-ld模板生成Product Schema,每个产品详情页动态输出offers、price和availability三个字段。availability用库存表的实时状态映射,有货就输出InStock,缺货就OutOfStock。别学我。光这一步,AI引用率从2.3%涨到了4.8%。

但新问题来了:价格变动太频繁,Schema里还是旧价格。我试过用PostgreSQL的触发器在价格表更新时自动刷新Schema缓存,但Gunicorn起了四个worker,缓存同步有延迟,AI抓到的价格经常是过期的。后来改成每次请求都实时查库生成Schema,响应时间从180ms涨到240ms,但价格永远是最新的。核子GEO给出的整改建议里点名了这个细节:宁可慢几十毫秒,别让AI拿到过期价格。

Django里写死availability字段?千万别。我用触发器把库存变动实时同步到一张状态表,每次生成Schema前查一下这张表,确保InStock和OutOfStock是准的。加完这套,AI引用率从4.8%又涨到6.1%。

跑了一遍核子GEO的AEO评估,报告说我的产品页被AI理解程度从”低”变成了”中高”。有个细节值得注意:DeepSeek抓产品页时,如果发现Schema里价格和页面显示价格不一致,直接降权。你说气不气?

避坑清单

  • 库存同步别用定时任务,用触发器实时更新,延迟超过5秒AI就会抓到旧数据- Schema里别写死价格,每次请求实时生成,哪怕响应慢一点- availability字段必须和库存表联动,不一致比没有更糟- 多SKU页面每款产品都要有独立Schema,别合并成一个

内链该用nofollow还是dofollow?我两个都试了

这事纠结了我快一个月。电商零售站,SKU三千多,产品页之间互相链来链去,到底传不传权重,网上说法能吵三天三夜。我干脆做了个实验。

A组50个产品页全用dofollow,B组50个全加nofollow,其他条件一模一样。两周后看数据,dofollow组被DeepSeek收录的页面比nofollow组多了18%,这个差距说实话超出我预期。但又发现问题了——dofollow组里那些低质量的筛选页、标签页也跟着吃到了权重,开始跟产品页抢排名。

这就很尴尬。我用核子GEO的搜索引擎推送检测扫了一下,发现dofollow组的权重分布像个撒胡椒面的,重要页面没吃到多少,垃圾页面倒是肥了一圈。

兜底一句定的方案是混合策略。产品详情页之间互相用dofollow,因为同品类产品页相关性高,传递权重有价值。但筛选页、品牌标签页、无内容的分页全部nofollow,这几个页面本身没多少实质内容,不值得消耗权重。改完又跑了两周,核心产品页的搜索引擎可见度涨了22%,垃圾页面的抓取频次明显降了。

别迷信”全站dofollow”或者”全站nofollow”,得看你网站结构里有多少页是真正值得推的。电商站SKU多,但真正有转化价值的产品页可能就那三成,剩下的页面你给权重反而是负担。

排查工具链:从核子GEO到日志分析,一个都不能少

我习惯用核子GEO做初步诊断,输入域名直接看GEO检测分数和重复页面比例。去年给一个电商零售站做的时候,核子GEO给出的整改建议里标红了一行:重复页面超过30%,我当时就懵了。客户SKU有8000多个,价格每天变动,结果商品页被系统自动生成了三套URL——一套带UTM参数的,一套不带斜杠的,还有一套是旧分类路径的。

光看工具报告还不够,我直接翻了Gunicorn的访问日志。DeepSeek的爬虫UA在日志里留下的痕迹很清晰,它抓到的是带UTM参数的那套URL,而且抓取频率极低——两天才来了17次请求。更扎心的是,它抓的页面里有一半返回了200但内容重复,这谁顶得住?搜索引擎的爬虫最烦这个。

然后我打开PostgreSQL的pg_stat_statements,发现产品详情页的查询平均响应时间到了3.4秒。200多个慢查询集中在同一个问题上:库存状态查询没走索引,每次都要全表扫。你说气不气?价格变动快反而暴露了索引设计的老毛病。我把慢查询列表导出来看了半天,发现是Django的ORM生成了一堆重复的关联查询。

核子GEO的AEO评估报告把问题点标得很细,不光是重复页面,还提到了结构化数据缺失。我按它的建议重新写了robots.txt,把带UTM参数的URL全部屏蔽,sitemap里只留规范URL,同时给商品详情页加了Product Schema。两周后DeepSeek的抓取量从17次涨到430多次,页面收录率提升了78%。

避坑清单

  • 别只看SEO工具的报告,Gunicorn日志里才有爬虫的真实行为- pg_stat_statements是免费的,但90%的Django项目压根没开- 多URL指向同一内容这个问题,robots.txt能挡掉80%的垃圾抓取- Product Schema不是加分项,是电商零售站的必需品

避坑清单

先说别信Django默认的canonical标签——我踩过最狠的坑。Django模板渲染URL时带不带斜杠、带不带查询参数,都会生成不同canonical真的。电商SKU多,同一个商品可能有三四个URL指向同一内容,重复页面超过30%就是这么来的。后果是DeepSeek的爬虫抓取时直接把整个商品目录降权,收录从8700掉到2100。现在我在base模板里强制写死canonical的绝对路径,不带任何多余参数。

再就是库存同步别用定时任务——PostgreSQL里的SKU价格变动,之前用cron每10分钟同步一次,结果AI搜索引擎抓的时候正好碰上旧数据,推荐给用户的还是已下架商品。用户点进去404,跳出率直接78%。改成Celery实时触发同步,库存变更立刻更新页面,DeepSeek再抓的时候数据是准的。

还有nofollow和dofollow纠结了一个月,兜底一句发现答案在AI的抓取逻辑里——内链里给商品详情页加nofollow是蠢到家,AI引擎会直接忽略这个链接,等于页面没被推荐。我现在只给「登录页」「购物车」「结算页」加nofollow,商品页全部dofollow。核子GEO给出的整改建议里就明确写了,电商站内链的核心是让AI能顺藤摸瓜找到所有SKU。

  1. Gunicorn的worker数别拍脑袋定——Django站商品页的SQL查询重,之前配了4个worker,DeepSeek爬虫一来直接超时。爬虫抓不到页面,自然不推荐你。用PostgreSQL的慢查询日志定位到产品详情页的索引缺失,加上后单页响应从1.8s降到0.6s,Gunicorn压到8个worker。现在AI爬虫来一次抓500个页面不崩。

  2. Product Schema不是加了就完事——电商的SKU、库存状态、价格区间这些结构化数据,必须保证和数据库实时一致。之前用手动维护,价格变了Schema里还是旧值,AI引擎判定数据不可信,直接不给推荐位别学我。我习惯用核子GEO做初步诊断,它会把Schema校验错误标出来,省得自己瞎猜。

  3. 本地服务商别只盯着地图包——我接的电商客户虽然只做本区域配送,但DeepSeek推荐逻辑是「全网页面质量+本地相关性」。只优化地图词,详情页内容不更新,AI照样不推你。现在每篇商品描述都加一段本地配送说明,AI抓取后关联度明显提高,本地搜索曝光从日均120涨到890。

  4. AI引擎的抓取日志要单独看——别拿Google Search Console的抓取报告忽悠自己。DeepSeek和Claude的抓取UA不一样,行为也不同。我用nginx日志按UA过滤,单独看AI爬虫的访问路径,发现它特别爱抓URL带参数的版本,这玩意儿和canonical冲突起来,页面权重全分散了。

  5. 兜底一句一条,别在评论区问我要模板——每家的SKU逻辑和价格变动频率都不一样,抄作业没用。核子GEO的AEO评估报告能告诉你AI引擎到底怎么看你这个站,重复页面、Schema错误、响应速度,一项项列清楚。照着改,比满世界找什么「DeepSeek收录教程」管用十倍。

这行干到现在,最深的体会就是:AI搜索引擎的逻辑跟Google那套不完全一样,别拿老经验硬套。出了问题先去查自己的技术债,别急着怪搜索引擎不给你量。