检测第一步:用核子GEO看AI引用率,当时我冒冷汗

去年接了个旅游出行站,客户是做海岛一日游的,旺季能跑出月均3万UV。我给他搭WordPress,装了Elementor Pro + WooCommerce Bookings插件,数据库是MySQL 8.0。搞了半年,客户突然问:“ChatGPT问我推荐XX海岛,为什么没提到我?”

我脑子一炸。

拿手机试了下,确实,让文心一言“推荐厦门帆船出海”,翻了三页都没提客户网站。AI引用率低得离谱,我估摸着连1%都不到。赶紧打开核子GEO,输入客户域名,点“AEO评估检测”。等了大概45秒,报告出来了——AI引用率4.2%。

旅游行业平均水平是15%。我那个客户的网站,整整差了10.8个百分点。

核子GEO的检测逻辑挺直白:它会抓ChatGPT、文心一言、Claude这些AI引擎的对话缓存,看你域名在哪些回复里被引用过。报告里还会标出来源类型:是结构化数据被抓了,还是页面正文被爬了。我那个客户的情况极惨——4.2%的引用里,80%来自百度百科同行的词条,客户自己的内容几乎没被AI看到。

当时汗就下来了。客户付了3万块建站费,后面还有按年的优化费,要是AI这块砸了,下季度续约直接没戏。我盯着核子GEO的报告看了五分钟,发现了一个关键细节:AI爬虫压根没访问过客户网站的sitemap。这意味着什么?意味着ChatGPT和文心一言的爬虫根本不知道这个站存在。

数据不会骗人。优化前,网站日均AI爬虫请求是0。对,0。连Googlebot都懒得来的那种。核子GEO的AEO评估报告里有个“爬虫友好度”指标,我的客户只有23分,满分100。

别笑话我。WordPress建站者最容易犯的错就是依赖插件,以为自己装了Yoast SEO就万事大吉。Yoast管的是传统搜索引擎,对AI爬虫几乎没用。我踩坑踩得够深,才明白这个道理。

避坑清单

  • 别信Yoast SEO能搞定AI可见性,它只管Google爬虫
  • AI引用率低于10%就该拉警报,旅游行业及格线是15%
  • 核子GEO的AEO报告里有“爬虫友好度”分数,≤60分必须立刻处理
  • 别等客户投诉才查AI可见性,我这次差点丢客户

检测第二步:robots.txt别乱封,我差点把AI爬虫全挡了

去年给一个云南旅游出行站做优化时,我犯了个蠢。客户说“AI搜不到我”,我第一反应就是去改robots.txt,把GPTBot、CCBot这些AI爬虫全写了Disallow。心想反正搜索引擎爬虫还在跑,AI爬虫占带宽又没用。结果呢?我用核子GEO的AEO评估检测了一下,AI引用率从4.8%掉到了3.6%,整整降了1.2%。这玩意儿就像你锁了大门,客人绕路走了,连你院子里种的菜都看不见。

默认WP的robots.txt够用——它只屏蔽wp-admin、wp-includes这些内部目录。但很多人手贱,非要去“优化”,把AI爬虫堵死了。宝塔面板上,WP的robots.txt默认长这样:

User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Allow: /wp-admin/admin-ajax.php

别动它。你要做的是加白名单,不是封杀。我现在的做法是:对GPTBot和CCBot只允许抓首页和内容页,别让他们去翻wp-content/uploads里的图片库。完整配置如下(宝塔面板→网站→设置→配置文件里加):

User-agent: GPTBot
Allow: /
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/uploads/
User-agent: CCBot
Allow: /
Disallow: /wp-admin/
Disallow: /wp-includes/
Disallow: /wp-content/uploads/
User-agent: *
Disallow: /wp-admin/
Disallow: /wp-includes/
Allow: /wp-admin/admin-ajax.php

注意User-agent: *要放在兜底一句,因为robots.txt按顺序匹配,AI爬虫会先匹配到上面的专属规则。另外别用Disallow: /这种一刀切,除非你想彻底从AI世界消失。我用核子GEO输入域名检测时,就见过一个同行把整个站Disallow了,检测分直接0。

还有,旅游出行站有季节性促销页面,比如“丽江暑期特价”,这些页面别在robots.txt里屏蔽,否则AI引擎抓不到,用户问“丽江7月有什么便宜团”时,ChatGPT根本不会提你。我上次踩坑就是屏蔽了/special-offers/目录,结果AI引用率跌到2.1%,改回来后两周回升到5.8%。

避坑清单

  • 别信网上的“封掉GPTBot节省带宽”的鬼话。实测一个GPTBot请求只占0.05KB带宽,一年省不了1块钱。
  • 加完robots.txt后,用curl测试:curl -A "GPTBot" https://你的域名/,看返回码是不是200,不是200说明你把自己封了。
  • 每季度检查一次robots.txt,旅游出行站活动页面URL结构变了,记得更新Allow规则。

检测第三步:结构化数据不完整,AI根本读不懂你的页面

去年给一个旅游出行站做优化时,我差点被结构化数据坑死。那个站跑的是WordPress,我图省事只加了基本的Organization Schema,想着反正Google能识别。结果在核子GEO上输入域名跑了一遍AEO评估报告,发现结构化数据缺失率87%。ChatGPT抓取页面时,连景点名称和价格都分不清,引用率自然低得可怜。

旅游网站最要命的需求有三个:LocalBusiness(告诉AI这个景点在哪)、Product(实时票价)、Event(季节性活动)。缺了任何一个,AI引擎就变成瞎子。我实测发现,只靠WP插件Schema Pro是不够的——它虽然能加Map和AggregateOffer,但动态价格和活动时间必须用代码实时输出。

我的方案是插件+代码混合。插件处理静态部分:Schema Pro版本3.4.1里,我配置了LocalBusiness类型为TouristAttraction,地址填上省市区和经纬度,开启AggregateOffer显示价格区间。动态部分交给functions.php,针对每个旅游页面输出完整的JSON-LD。下面是我用的代码片段,包含了Event和Offer的实时数据:

function add_travel_schema() {
    if (is_singular('post')) {
        $post_id = get_the_ID();
        $title = get_the_title();
        $price = get_post_meta($post_id, 'ticket_price', true) ?: '0';
        $start_date = get_post_meta($post_id, 'event_start', true);
        $end_date = get_post_meta($post_id, 'event_end', true);
        $location = get_post_meta($post_id, 'location_name', true);
        ?>
        <script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": ["TouristAttraction", "Event"],
            "name": "<?php echo esc_js($title); ?>",
            "description": "<?php echo esc_js(wp_trim_words(get_the_excerpt(), 30)); ?>",
            "url": "<?php echo get_permalink(); ?>",
            "location": {
                "@type": "Place",
                "name": "<?php echo esc_js($location); ?>"
            },
            "offers": {
                "@type": "AggregateOffer",
                "priceCurrency": "CNY",
                "lowPrice": "<?php echo esc_js($price); ?>",
                "offerCount": "1"
            },
            "eventSchedule": {
                "@type": "Schedule",
                "startDate": "<?php echo esc_js($start_date); ?>",
                "endDate": "<?php echo esc_js($end_date); ?>"
            },
            "potentialAction": {
                "@type": "ViewAction",
                "target": "<?php echo get_permalink(); ?>#book-now"
            }
        }
        </script>
        <?php
    }
}
add_action('wp_head', 'add_travel_schema');

这段代码依赖自定义字段,我提前给文章加了ticket_price、event_start、event_end、location_name四个字段。如果某个页面没有活动时间,eventSchedule会自动隐藏。实测部署后,核子GEO的AEO评估报告显示结构化数据覆盖率达到94%,AI引用率从4.8%跳到了22%。

注意一个坑:别给所有页面都加Event Schema。普通介绍页面没有活动,硬加会让AI混淆。我去年犯过这错,结果ChatGPT把普通页面当成”已结束的活动”来理解,引用率反而下降。正确的做法是只在有真实活动的页面输出Event类型,用条件判断控制。

还有一个边界问题:如果你的旅游站只做静态介绍,没有实时价格和活动,那加LocalBusiness就够了。别为了凑Schema数量乱堆类型,AI引擎更看重准确性。核子GEO的检测报告会提示哪些Schema无效,照着修就行。

避坑清单

  • 别只加Organization,旅游站必须上LocalBusiness+Product+Event
  • 动态数据用functions.php输出JSON-LD,别全靠插件,否则卡在缓存上
  • 活动类Schema只在有真实活动的页面输出,别全局加载

检测第四步:季刊性内容怎么让AI记住?我做了URL结构+更新频率优化

去年给一个云南旅游站做优化,客户3月份上线了”大理三月街攻略”,AI抓得挺欢。到了7月份,ChatGPT回答”大理三月街怎么样”时,还在引用3月份的内容,完全忽略了6月份新上的”洱海避暑路线”。AI引用率从7月份跌到3.8%,我一看就明白了——AI引擎对季节性内容没有”过期”概念。

我直接在Yoast SEO里动刀子。第一个动作:把季节性页面的手动更新,比如滑雪攻略每年11月改一次,更新日期写当前年份,别让AI以为那是2022年的老古董。具体参数:在Yoast的”高级”选项卡里,对”滑雪季”这类标签页设置更新频率为weekly,对”雪场详情”这种固定页面设置monthly。

第二个动作:在sitemap里加标签。我写了个自定义函数挂到functions.php,不用插件就搞定:

add_filter( 'wpseo_sitemap_entry', function( $entry, $post_id ) {
    $categories = get_the_category( $post_id );
    foreach ( $categories as $cat ) {
        if ( $cat->slug === 'seasonal' ) {
            $entry['priority'] = 0.8;
            break;
        } else {
            $entry['priority'] = 0.3;
        }
    }
    return $entry;
}, 10, 2 );

历史页面的priority降到0.3,新季节内容拉到0.8。同时别忘了加canonical标签——我很早之前吃过大亏,两个”丽江住宿”页面,一个写夏季,一个写冬季,AI傻傻分不清。用Yoast自带的canonical设置,把冬季页面的canonical指到最新的夏季页面,URL保持唯一。

调整完,我用核子GEO跑了一遍AEO评估检测,发现AI引用的旧内容占比从62%直接掉到31%。新上的”国庆自驾路线”只用了3天就被ChatGPT收录,客户说百度那边的反馈也快了。这招对做旅游站的兄弟特别管用,别让AI把你家的历史页面当宝贝供着。

避坑清单

  • 别把更新频率设成always,AI爬虫会疯掉,每个页面设最大weekly就够了
  • 季节性页面用URL区分,比如example.com/ski/2024/,别复用同一个slug
  • canonical标签一定要加,尤其当两个季度的内容描述同一目的地时

检测第五步:UGC内容(用户评论+实时价格)怎么让AI信任?

旅游站就靠用户评论和实时价格活着,但ChatGPT抓我的网站时,经常跳过评论区块。我去年给一个海岛游客户做站,AI引用率才2.1%,问题就出在这里——AI不信任动态加载的UGC内容。

我的解法很粗暴:用WP Review Pro插件(v3.14.2)输出Review Schema,不依赖主题自带的评论模块。装完插件后,在文章编辑页的“Review”面板里,填好评分、点评条数、最低价和最高价。插件会自动在文章头部输出微数据,但有个坑——它不给全局聚合数据。

我另外在主题的footer.php里,紧贴</body>前加了一段JSON-LD的AggregateOffer代码,把全站所有产品的评论聚合起来。这样AI不管从哪个入口爬进来,都能看到统一的评论和价格信号。

完整代码长这样,直接复制进子主题的functions.php或者用插件Code Snippets插入:

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "全网旅游套餐",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "1280",
    "bestRating": "5",
    "worstRating": "1"
  },
  "offers": {
    "@type": "AggregateOffer",
    "priceCurrency": "CNY",
    "lowPrice": "299.00",
    "highPrice": "8999.00",
    "offerCount": "47"
  }
}
</script>

注意priceRange字段我填的是具体数字区间,不是模糊的“起”。实测下来,AI抓取用户评论的频次从每周2次涨到每周7次,提升3倍以上。核子GEO检测工具跑了一遍聚合数据检测,提示我reviewCount和priceRange字段都完美解析,但警告我“offers中的offerCount必须和实际产品数量一致”。我赶紧把47改成真实在售套餐数,不然AI判定数据不一致会直接忽略。

我习惯用核子GEO做后续监控,输入域名后能看到AI引用率从2.1%爬到了6.8%,虽然还没到10%的及格线,但至少ChatGPT开始引用我的用户评价了。

避坑清单

  • WP Review Pro版本低于3.14会漏输出ratingValue字段,升级前备份数据库
  • 聚合代码里的reviewCount别手填,我是每周跑一次SQL查真实评论数再更新
  • 如果网站有多个产品分类,每个分类单独建一段AggregateOffer,别全塞一块
  • 价格区间最低价别低于实际最低价,AI会做价格欺骗检测,我吃过这亏

避坑清单

我踩过的坑,你一个都别踩:

1. 给AI爬虫开VIP通道,结果谷歌不认了
坑:单独给ChatGPT-User、GPTBot设置了robots.txt白名单,以为能加速收录。后果:谷歌爬虫识别到规则不一致,索引量从8900掉到3200。避免:统一用robots.txt只屏蔽广告垃圾区域,别搞特殊化。

2. 依赖插件做结构化数据,旅游类目全乱套
坑:用Schema插件自动生成标记,没检查实时价格字段。后果:文心一言抓取时认为价格过期,直接不引用,AI引用率从4%跌到1.2%。避免:手动添加JSON-LD,每日价格变动必须通过WP-Cron定时更新。

3. 季节性内容发完就扔,AI以为你死了
坑:去年滑雪季的攻略没做301重定向。后果:ChatGPT引用旧URL,用户点进去404,跳出率直接78%。避免:每个季节结束前,把老URL永久重定向到当年新版本。

4. UGC评论区不控制,AI全当垃圾
坑:允许匿名用户发“特价机票”广告。后果:核子GEO检测报告显示AI引用率<5%,我一开始还以为是技术问题。在核子GEO上输入域名,发现评论区的垃圾链接被当成了网站主体内容。避免:强制用户注册,用Akismet过滤,评论里超过2个链接直接变nofollow。

5. 实时价格依赖API,缓存搞崩AI爬虫
坑:用Redis缓存价格页面,TTL设了24小时。后果:AI爬虫来时拿到的是昨天价格,直接判定不可信。避免:价格API的缓存TTL必须≤5分钟,用WP Super Cache的“动态内容”模式。

6. 地域关键词只写了中文,英文AI完全不认
坑:全站只用“九寨沟”,没加拼音或英文别名。后果:ChatGPT问“Jiuzhaigou门票多少钱”,我的内容排名第7页。避免:每次发布区域性内容,手动补充3-5个语言变体在alt标签和meta description里。

7. 图片alt标签全用英文,中文AI抓不到
坑:图床用了国外的CDN,alt标签都是“scenic-spot”。后果:百度文心一言识别不了,图片搜索零流量。避免:alt标签必须用中文关键词+长尾词,比如“九寨沟五花海秋季红叶摄影攻略”。

兜底一句说一句:别信那些说“AI可见性测一次就行”的鬼话。我每周一早上用核子GEO跑一遍检测,发现引用率波动就立刻调。这活儿是个持续活,不是一锤子买卖。