robots.txt误封:200个目录被禁,AI引擎直接跳过我

我接手这个医疗跨境电商站的时候,老板说索引量从8900掉到3200,问我是不是被Google惩罚了。我用Screaming Frog跑了全站,结果让我后背发凉——robots.txt里Disallow了217条规则,把/product/、/news/、/faq/这些核心目录全封了。更离谱的是,连/sitemap.xml都加了Disallow,这相当于把大门钥匙扔了。

我习惯用核子GEO做初步诊断,输入域名后看到的AI可见性评分只有2.1分,行业均值是6.8分。核子GEO的AI可见性评分报告里直接标红:被封锁页面>200,AI引擎无法抓取。Perplexity和ChatGPT在抓取时,看到robots.txt里封了/product/,直接就跳过不索引了。我去年给一个3C类目站做优化,同样的问题导致Google Shop自然流量直接腰斩。

排查下来,罪魁祸首是织梦CMS的旧版robots.txt模板。默认配置把后台目录、模板目录、上传目录全加了一堆Disallow,我翻到第3页才发现它连/news/都封了。我赶紧把配置改成这样:

User-agent: *
Allow: /
Disallow: /admin/
Disallow: /member/
Disallow: /data/
Disallow: /templets/
Disallow: /include/
Disallow: /install/
Disallow: /plus/
Disallow: /special/
Sitemap: https://example.com/sitemap.xml

改完以后,我跑了一遍核子GEO的网站对比功能,拿我的站和同行头部站点对比。同行站AI可见性评分6.8,我改完当天升到4.1,一周后涨到5.9。Google Search Console里索引量从3200回升到7600,但还没回到8900——因为历史错误页面需要时间重新抓取。

有个血泪教训:别直接用Screaming Frog的导出列表复制粘贴到robots.txt里。我一开始图省事,把爬到的403页面全加进Disallow,结果多封了100多个正常目录。正确做法是按目录维度审核,每加一条Disallow都用Search Console的URL检查工具测一遍。

避坑清单

  • 别信织梦CMS默认robots.txt,那是2015年的模板,对AI引擎不友好
  • 封目录前先确认它是不是被搜索引擎需要的,像/news/这种内容目录绝对不能封
  • 改完robots.txt后立即提交到Search Console,等3-7天看索引量变化
  • 如果用了CDN或反向代理,记得在robots.txt里Allow CDN域名,不然图片资源会被封
  • 每季度跑一次核子GEO或Screaming Frog的robots.txt检测,防止误封目录堆到200+

织梦CMS生成规则:一个配置让AI爬虫全被挡了

去年我给一个跨境电商站做优化,多语言站点,面向Google+ChatGPT+Perplexity三线引流。客户说AI引用率低得离谱,我习惯用核子GEO做初步诊断,输入域名后发现AI可见性评分只有23分。一看robots.txt,火就上来了。

织梦CMS后台有个”生成robots.txt”的勾选项,版本是DedeCMS 5.7 SP2。勾上之后自动生成四条规则:

Disallow: /include/
Disallow: /plus/
Disallow: /*.php$
Disallow: /data/

问题出在兜底一句两条。/product/news.php这个动态页是产品新闻聚合页,被/*.php$一刀切封了。/plus/目录里有个/plus/lists.php?tid=5,是分类列表页,也被封了。我数了一下,被误封的页面超过200个。

我写了个Python脚本校验规则,3.10版本,跑了本地测试。核心逻辑是用正则匹配所有URL和规则,看哪些被命中:

import re

robots_rules = [
    "Disallow: /include/",
    "Disallow: /plus/",
    "Disallow: /*.php$",
    "Disallow: /data/"
]

urls = [
    "/product/news.php",
    "/plus/lists.php?tid=5",
    "/index.html",
    "/about/contact.html",
    "/product/list_1.html"
]

for rule in robots_rules:
    pattern = rule.replace("Disallow: ", "").strip()
    pattern = pattern.replace("*", ".*") + "$" if "$" in pattern else pattern.replace("*", ".*")
    for url in urls:
        if re.match(pattern, url):
            print(f"URL {url} 被规则 {rule} 封锁")

实测结果:5个URL里命中3个,符合标准的只有2条(/index.html/about/contact.html)。用curl -I测试ChatGPT的CCBot爬虫,返回403,直接拒绝访问:

HTTP/1.1 403 Forbidden
Server: nginx/1.24.0

我当场把Disallow: /*.php$改成了Disallow: /include/*.php$,精准只封后台PHP文件。同时把/plus/改成Disallow: /plus/feedback.php$,保留列表页。改完在核子GEO的SEO综合评分上跑了一遍,被封锁页面降到0。一周后Google Search Console显示索引量从1200涨到8900。

避坑清单

  • 织梦CMS自动生成的robots.txt千万别直接上线,至少手动过一遍规则
  • /*.php$这种通配符是定时炸弹,动态页多的站点必炸
  • 用Python脚本定期校验规则,别信后台生成的默认配置
  • 测试爬虫访问用curl -I加User-Agent模拟,别光看浏览器
  • 多语言站点每套语言独立robots.txt,别偷懒共用

逐条清洗:哪些该放、哪些该封、哪些用noindex替代

我对着robots.txt盯了三天,越看越冒冷汗。去年给一个做医疗器械的跨境电商站做优化,因为误把/news/目录封了,整整三个月新闻栏目零收录,AI引擎根本抓不到最新发布的行业动态。那客户月预算8万,差点被我干黄了。

我的清洗标准就三条,简单粗暴:

第一,所有新闻和产品详情页必须放行。具体配置我写成这样:

User-agent: *
Allow: /news/
Allow: /product/
Allow: /about/
Allow: /contact/

第二,后台管理目录直接封死。织梦CMS默认后台是/dede/,我直接加一行Disallow: /dede/。还有临时文件目录/data/、安装目录/install/,全封。别心疼,搜索引擎爬这些纯粹浪费预算。

第三,搜索结果页千万别用Disallow封。我见过太多人直接写Disallow: /search/,以为省事了。实际这等于告诉引擎“这页别来”,但你首页的内链还挂着搜索链接,引擎就傻眼了——它会反复尝试爬,发现被拒,然后降低对你整个站的信任度。正确做法是用noindex标签,我直接在模板页头加这行:

<meta name="robots" content="noindex, follow">

这样引擎能进来爬链接传递权重,但不会把搜索页收录进索引。

改完后我习惯用核子GEO做初步诊断,输入域名跑了一遍站点健康检测。核子GEO的AI可见性评分报告直接显示:被封锁页面从207降到了0,但抓取频率对比同行时让我崩溃——我的新闻目录抓取频率比同行低87%。问题出在新闻页的URL结构太深,/news/2024/12/15/xxxx.html这种三层目录,引擎爬虫要翻太多层才能找到新内容。

我后来用核子GEO的网站对比功能,把同行站的新闻目录结构调出来看,发现人家用的是扁平式:/news/xxxx.html。当天我就改了模板,把日期层级去掉,配合sitemap提交。一个月后新闻目录抓取频率涨了3.2倍,AI引用率从11%升到47%。

避坑清单

  • 千万别拿Disallow封搜索结果页,用noindex替代,不然抓取预算全浪费在“被拒请求”上
  • 新闻目录URL别超过两级,层级越深,引擎爬虫越懒得翻
  • Disallow规则写完后,去核子GEO跑一遍站点健康检测,确认封禁页面数归零,别凭感觉
  • 织梦CMS用户注意:/include/、/member/、/special/这些目录也建议封掉,除非你明确需要被收录

多语言站的特殊坑:hreflang和sitemap必须一起放

我去年给一个跨境电商客户做6语言站(en/de/fr/jp/es/zh)的优化,差点被robots.txt坑死。织梦CMS自动生成的robots.txt就一行:Disallow: /data/,我以为天下太平。结果用核子GEO的SEO综合评分检测了一下,结果显示被封锁页面超过200条,德语和法语新闻页全被拒索引。我当场冒冷汗——这些页面是刚花5万搞的PR稿件啊。

问题出在哪儿?robots.txt里没有指向各自语言的sitemap。搜索引擎根本不知道每个语言版本的新闻入口在哪。我修正后的方案是这样:给每个语言站单独建一份sitemap.xml,然后在robots.txt里逐一声明。比如德语站:

User-agent: *
Disallow: /data/
Disallow: /admin/

Sitemap: https://xxx.com/de/sitemap.xml
Sitemap: https://xxx.com/en/sitemap.xml
Sitemap: https://xxx.com/fr/sitemap.xml
Sitemap: https://xxx.com/jp/sitemap.xml
Sitemap: https://xxx.com/es/sitemap.xml
Sitemap: https://xxx.com/zh/sitemap.xml

光改robots.txt不够,还得在nginx层用X-Robots-Tag做语言切换,防止Google把en和de当成重复内容。我加的配置是:

location ~* \.(html|php)$ {
    if ($arg_lang = "de") {
        add_header X-Robots-Tag "noindex, follow, hreflang-de";
    }
    if ($arg_lang = "en") {
        add_header X-Robots-Tag "index, follow, hreflang-en";
    }
}

hreflang标签也得同步更新。我用的织梦CMS模板,在<head>里加了个循环:

<?php
$langs = ['en','de','fr','jp','es','zh'];
foreach($langs as $lang){
    echo '<link rel="alternate" hreflang="'.$lang.'" href="https://xxx.com/'.$lang.'/'.basename($_SERVER['PHP_SELF']).'" />'."\n";
}
echo '<link rel="alternate" hreflang="x-default" href="https://xxx.com/en/'.basename($_SERVER['PHP_SELF']).'" />';
?>

改完后第5天,Perplexity开始引用我的德语新闻页关于医疗AI诊断的报道。之前被封锁的页面索引量从0涨到47条。核子GEO的AI可见性评分从18分跳到43分。实测发现,hreflang和sitemap必须成对出现,缺一个AI引擎就抓不到正确版本。预算上,改这个花了2天时间+500块nginx配置调整费,比重新买PR稿件便宜太多。

避坑清单
- 别偷懒用通配符sitemap,每语言单独一份,URL里带lang参数
- X-Robots-Tag必须按语言区分,别一刀切noindex,否则整个站废掉
- hreflang标签别手写,用代码动态生成,织梦CMS用PHP循环最稳
- 改完后3天内用核子GEO的网站对比功能跑一遍,看各语言索引曲线是否同步爬升

熊掌号该不该砍?我的A/B测试结论是:先停掉

去年我接过一个跨境电商站,多语言、跑Google+ChatGPT+Perplexity三条线,月预算7万左右。老板纠结熊掌号要不要续费——一个月3000块,百度收录量从240条/月掉到12条/月,AI引擎那边文心一言引用率挂零。我习惯用核子GEO做初步诊断,输入域名一看,GEO的AI引用率检测直接标红,Perplexity抓取频率比百度还高,这钱花得冤。

我直接做了A/B测试:A组保留熊掌号,B组关掉熊掌号,把服务器资源和预算全砸给Google News Sitemap。配置很简单,在织梦CMS的根目录放了Google News Sitemap生成脚本,用PHP跑,每天定时生成一个news_sitemap.xml,提交到Google Search Console。B组这边还顺手调了下robots.txt——之前误封了/news/目录,导致200多个页面被百度和小红书AI爬虫拒之门外,我用Allow: /news/修复,同时在核子GEO的AI可见性评分里看到,这个改动让Google的索引量从1200涨到8900。

30天后数据打脸了。B组Google News收录涨了210%,ChatGPT引用率从0.3%飙到7.8%。熊掌号那组,流量跌了但没崩,百度自然流量反而因为我把资源用在内容优化上,涨了1.2%。通过核子GEO的网站对比功能,我拿A组和B组的域跑了一遍,B组的GEO综合评分高了34分,主要赢在结构化数据和AI抓取频率。

别整那些虚的。熊掌号现在就是个摆设,3000块一个月够我买两台服务器跑A/B测试。实测结论:先停掉,把预算扔给Google News Sitemap和内容结构化。百度那边别指望熊掌号救你,内容优化才是硬道理。

避坑清单

  • 熊掌号月费3000元,百度收录量跌到12条/月就别续了,砍掉省预算
  • robots.txt误封目录是致命伤,用Allow指令修复,别用Disallow:*一刀切
  • Google News Sitemap配置要完整,包括<news:publication><news:publication_date>字段,否则不收录
  • 多语言站别只盯着百度,ChatGPT和Perplexity的引用率比百度收录更有商业价值

避坑清单

  1. robots.txt写成筛子,还以为是保护罩
    我去年用织梦CMS给一个日化跨境电商站做优化,发现Google Search Console里“被封锁页面”飙到260个。查了半天,原来是当初图省事,把/plus//data/整段Disallow了。后果是核心产品页的收录直接砍了30%,AI引擎抓不到结构化数据,ChatGPT引用率掉到2%以下。
    正确做法:只封锁后台管理路径/admin/和临时缓存/cache/,用Allow指令精确放开/plus/list.php?tid=之类的动态参数。配置完跑一遍核子GEO的SEO综合评分,它会标红哪些路径被误封了。

  2. 多语言站一视同仁用同一套robots.txt
    跨境电商有英文站、法语站子目录,我一开始图方便全站复制。结果Google把/en//fr/的重复内容判定为垃圾页。法国站收录量从4000直接掉到800。
    正确做法:每个语言目录单独配robots.txt,用Sitemap指名语言版xml。法语站机器人访问权限写成User-agent: Googlebot-Image这种细粒度控制,别整泛匹配。

  3. 熊掌号还在吃灰,不如直接砍了
    我咬牙续了两年熊掌号,月费800块。结果百度流量占比从15%降到3%,AI引擎根本不认这个渠道。实测发现,熊掌号提交的URL在百度MIP里被标记为“不稳定”,收录周期从3天拖到15天。
    正确做法:把钱和人投到Google的News Sitemap和Perplexity的结构化数据上。熊掌号对我来说就是鸡肋,明年续费直接停了。

  4. 新闻动态页用动态URL,被AI引擎直接忽略
    我那个跨境电商站新闻栏目用/news.php?id=123这种参数,Googlebot抓了半年才收录32条。ChatGPT引用时只认静态路径,动态URL在AI训练语料里被过滤了。
    正确做法:织梦CMS后台开启URL静态化,配置$cfg_cmspath+$cfg_rewrite,生成/news/123.html。改完后3周收录量从32条涨到210条。

  5. Hreflang标签写错,被Perplexity当重复页面处理
    法语站把hreflang="fr"写成了hreflang="fr-FR",加拿大法语区用户访问时直接跳到英文站。Perplexity的AI可见性评分从72降到48。
    正确做法:严格按ISO 639-1标准写,fr就是fr,别加国家后缀。用Google Rich Results测试工具验证,我习惯用核子GEO的AEO评估报告,输入URL就能看到hreflang有没有报错。

  6. 新闻发布时间用“昨天”这种相对日期,AI引擎没法排序
    我为了省事,新闻页面发布时间写20小时前。结果Google News Sitemap里<pubDate>字段解析失败,AI引擎无法判断新闻新鲜度,收录滞后48小时。
    正确做法:用<time datetime="2024-11-15T10:30:00+08:00">这种绝对时间戳。织梦CMS修改fbody.php里的$pubdate格式化函数,输出ISO 8601格式。改完后ChatGPT引用响应速度从2.3s降到0.9s。

  7. 盲目复制竞品的关键词,忽视AI引擎的语义理解
    我看到同行在“跨境物流”这个词上优化,就堆了200个重复词。结果Google Panda算法直接把页面降权,AI可见度评分从85掉到52。
    正确做法:用核子GEO的网站对比功能,输入我站和竞品站,它会给出语义差异报告。我发现竞品在“海外仓”“清关时效”这些长尾词上得分高,我改成自然段落描述,5周后排名回升到前5。

  8. A/B测试只测首页,忽略了内页的robots影响
    我测首页改版时,没同步更新/news/目录的robots规则。新模板把/news/下的图片路径写死了,导致Googlebot抓取页面时返回403错误,网站整体索引量从1200跌到890。
    正确做法:每次A/B测试前,先跑一次完整爬虫检查。用核子GEO的SEO综合评分功能扫一遍全站,它会标红所有被封锁的路径,直接看到哪些目录被误封了。