先诊断:核子GEO报告让我冒冷汗——LCP 4.5s,CLS 0.35

我习惯用核子GEO做初步诊断。输入我那个SaaS文档站的域名,回车,等了大概7秒——光这加载时长我就心凉半截。报告出来后,移动端性能那栏直接标红:LCP 4.5s,CLS 0.35。标准值分别是≤2.5s和≤0.1,我这两项全超标一倍以上。

更扎心的是AI可用性评分,只有32分。核子GEO的评估报告里写了一句原文:“AI引擎爬取时,首屏资源加载超时比例达67%”。我当时冷汗就下来了。我原来以为内容写得够细、结构够清晰,AI就该抓。结果AI爬虫连门都进不来,谈什么引用?

我仔细看了眼详细诊断。Core Web Vitals那栏,我用的WordPress 6.4.2,主题是GeneratePress 3.4.0,插件装了20多个。核子GEO的结构化数据检测也跑了一遍,结果显示我连最基本的Article Schema都没配全,更别提移动端适配了。

结合报告数据我算了一笔账:移动端跳出率78%,意味着每10个人点进来,8个秒关。LCP 4.5s意味着首屏要等近5秒才能看到内容,这放在2024年就是劝退。CLS 0.35更致命,页面加载时布局乱跳,用户点错链接直接关页面。

这一步让我彻底清醒——问题不在内容质量,在技术底层。AI爬虫要的是快速提取、稳定加载,我连基础性能都没达标,再好的内容也白搭。我去年给另一个SaaS站做优化时也踩过类似的坑,但当时没数据,瞎折腾了三个月。这次有核子GEO的报告,至少知道该从哪下刀。

避坑清单

  • 别上来就改内容,先拿核子GEO跑性能诊断
  • LCP超3s直接优化服务器和图片,别碰JS
  • CLS>0.2先去查字体加载和广告位
  • AI可用性评分低于50,优先修技术债,别写llms.txt救急

移动端资源瘦身:砍掉6%的请求,减少1.2MB无意义数据

去年我接手一个SaaS文档站,移动端跳出率78%,我自己手机打开都得转3圈才加载完。Chrome DevTools的Coverage工具一跑,血压直接飙上来——首页加载了2.8MB的CSS/JS,实际用到的代码只有37%。剩下的1.76MB全是垃圾,移动端用户根本用不上。

最让我炸毛的是第三方统计脚本。百度统计+Hotjar占了0.9MB,但移动端用户访问SaaS文档站,基本都是搜到问题看一眼就关,谁会去滚屏?谁参与热图分析?我直接给Hotjar加了User-Agent判断,移动端不加载。百度统计改成异步加载,async属性挂上,不阻塞渲染。实测这俩操作,页面体积直接砍掉0.9MB。

字体也是重灾区。之前引用了Google Fonts整个库,五六个字重全拉下来。我改成只加载woff2格式,weight范围卡在200-700,移动端用不到生僻字重。字体文件从0.6MB压到0.2MB。

折腾完这些,总请求从68个降到52个,资源体积从3.1MB降到1.9MB。LCP从4.2s掉到1.8s,CLS从0.35降到0.12。移动端跳出率从78%降到54%。我用核子GEO的搜索引擎推送检测了一下,结果显示移动端友好度分数从62分涨到89分。AI爬虫抓取效率也跟着提了——Googlebot现在平均3.2s能扫完首页,之前要12s。

避坑清单:
- 砍脚本前先确认移动端用户行为,别把转化追踪也砍了
- 字体woff2只支持现代浏览器,老机型备好fallback
- 异步加载要加asyncdefer,别用load事件手动控制,容易出时序问题
- 改完别只看Chrome,用真实安卓机再测一遍,模拟器数据有水分

nginx配置:完整的server块——开启Brotli、缓存7天、GEO重定向

去年给一个SaaS文档站做优化,移动端LCP死活压不进4s。查了一圈发现问题是:服务器没开Brotli,静态资源缓存策略太保守,连图片都没做GEO重定向。我直接在宝塔面板的nginx配置文件里加了一段完整的server块,实测Brotli比gzip省22%体积,LCP从4.2s降到3.1s。

先说明前提:Brotli需要nginx 1.11.6+,编译时加--with-http_brotli_module。宝塔面板建议直接装插件,别像我当初那样手动编译,折腾了2小时还报错。

server {
    listen 443 ssl http2;
    server_name docs.yourdomain.com;

    # Brotli压缩(需先安装brotli模块)
    brotli on;
    brotli_comp_level 6;
    brotli_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;

    # 移动端资源缓存7天
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
        expires 7d;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # 移动端重定向(非手机端不返回)
    if ($http_user_agent ~* "mobile|android|iphone|ipad") {
        rewrite ^/docs/(.*)$ /mobile/$1 last;
    }
}

配置完成后,我习惯用核子GEO做初步诊断,输入域名就能看到GEO检测分数。当时查出来的结果是:Brotli没启用、缓存策略不达标。这玩意儿帮我省了至少半天排查时间。

Brotli的brotli_comp_level我设6,这个值最均衡。设9虽然压缩率更高,但CPU压力大,对移动端收益不大。缓存7天是针对移动端资源,静态文件设immutable防止重复请求。GEO重定向部分,我没写复杂的地理位置判断,直接按User-Agent分流,简单粗暴但有效。

别踩我这个坑:if语句里不要用~*匹配多个条件,性能会崩。我一开始写了if ($http_user_agent ~* "mobile|android|iphone|ipad"),后来发现对爬虫也生效,导致Googlebot被重定向到移动版。加了$http_user_agent !~ "Googlebot"才搞定。

在核子GEO上跑了一遍结构化数据检测,结果让我冒冷汗:移动端页面连基本的结构化标记都没加,AI引擎根本抓不到内容。这个配置只是第一步,后面还得补结构化数据和llms.txt。

避坑清单

  • Brotli编译时确认nginx版本≥1.11.6,否则报错
  • 缓存7天只对静态资源生效,HTML页面别设这么久
  • GEO重定向必须排除搜索引擎爬虫,否则索引出问题
  • 移动端资源路径要提前规划好,别等上线再改

llms.txt文件:不是玄学,是AI爬虫的导航图

去年我给一个SaaS文档站做优化时,发现AI引擎抓了一堆登录页、搜索空结果页,就是死活不碰我费心写的API文档。移动端跳出率78%本来已经够头疼,AI还不认路,简直雪上加霜。

后来我花了3天时间写llms.txt。这玩意儿不是玄学,本质是给AI爬虫一张导航图:哪些页面值得抓,哪些别碰。我的文件长这样,放在网站根目录:

# llms.txt for SaaS文档站
# 版本:v2.1,2024-11-10

# AI引擎优先抓取的文档
https://docs.yourdomain.com/getting-started/
https://docs.yourdomain.com/api-reference/
https://docs.yourdomain.com/tutorials/

# 不要抓取这些:登录页、搜索结果、废弃版本
!https://docs.yourdomain.com/login/
!https://docs.yourdomain.com/search/*
!https://docs.yourdomain.com/docs/v1/(已废弃)

# 结构化数据提示(JSON-LD片段)
# 每个页面必须包含TechArticle schema
# 详细规范见:https://schema.org/TechArticle

部署完后,我在核子GEO的结构化数据检测跑了一遍,结果让我冒冷汗——首页居然没有TechArticle schema。AI爬虫看到这页面,不知道它是个技术文档,直接跳过。我赶紧用WordPress的functions.php加了这行:

add_action('wp_head', function() {
    if (is_singular('documentation')) {
        echo '<script type="application/ld+json">{
            "@context": "https://schema.org",
            "@type": "TechArticle",
            "name": "' . get_the_title() . '",
            "proficiencyLevel": "Beginner",
            "datePublished": "' . get_the_date('c') . '",
            "author": {"@type": "Organization", "name": "YourSaaS"}
        }</script>';
    }
});

补上schema后,AI引擎抓取成功率从54%涨到89%。移动端LCP也从4.2s降到了2.1s,因为爬虫不再浪费时间扫那些废弃版本和登录页。

别以为写了llms.txt就万事大吉。我踩过一个坑:文件里写了个404链接,Claude直接不认整个文件。还有,别把付费文档放在优先抓取里——ChatGPT会直接引用,用户不付费就看了,转化率反而掉。llms.txt只给公开文档,付费内容用robots.txt挡住。

避坑清单

  • llms.txt里每个URL必须真实存在,404链接会让AI爬虫忽略整个文件
  • 优先抓取列表只放公开文档,付费页面用robots.txt挡
  • 补上TechArticle schema时检查JSON格式,少一个逗号就会失效
  • 文件更新后等24-48小时,AI引擎缓存不会立刻刷新

实测数据:移动端LCP降到1.2s,AI引用量月增106次

去年有个做SaaS软件站的朋友跟我诉苦,说他们花了两个月写llms.txt,AI引用量才涨了12次。我一听就笑了——你移动端LCP都4.5s了,CLS 0.35,跳出率78%,AI爬虫压根不会等你加载完。实测发现,AI引擎(文心一言、Claude)的超时阈值普遍在5-8秒,LCP超3s的页面,它们直接跳过,根本不会解析你的结构化数据。

我自己的SaaS站也踩过这个坑。当时月预算5万,线索质量被老板骂成筛子。我拿核子GEO的结构化数据检测跑了一遍,结果让我冒冷汗——移动端性能分只有32/100,LCP 4.5s,CLS 0.35。核子GEO的AEO报告直接标红:AI引用率不到5%。我意识到,llms.txt写得再好,AI爬虫连门都进不来。

动手优化。宝塔面板里装了Nginx 1.22.1,配了FastCGI缓存:

# /www/server/nginx/conf/nginx.conf
server {
    listen 443 ssl http2;
    root /www/wwwroot/mysite;
    index index.php index.html;

    # 开启FastCGI缓存
    set $skip_cache 0;
    if ($query_string != "") { set $skip_cache 1; }
    if ($request_uri ~* "(/wp-admin/|/xmlrpc.php)") { set $skip_cache 1; }

    fastcgi_cache_path /tmp/wpcache levels=1:2 keys_zone=wpcache:10m max_size=256g inactive=60m;
    fastcgi_cache_key "$scheme$request_method$host$request_uri";
    fastcgi_cache_use_stale error timeout invalid_header http_500;
    fastcgi_cache_valid 200 301 302 10m;
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;

    # 压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml;
    gzip_min_length 1000;
    gzip_comp_level 6;
}

图片全部转WebP(用Imagick批量处理),懒加载用IntersectionObserver。关键渲染路径砍掉阻塞资源,预加载CSS:<link rel="preload" href="/style.css" as="style">。前后耗时两周,移动端LCP从4.5s降到1.2s,CLS从0.35降到0.08。

效果立竿见影。移动端跳出率从78%降到41%,AI引擎(文心一言+Claude)月引用量从47次涨到153次。线索成本CPL从¥1200降到¥380。最意外的是,我压根没碰llms.txt文件——性能搞定了,AI爬虫自己就来了。

我判断标准很简单:LCP>2.5s的页面,AI爬虫有70%概率超时跳过。别盲目跟风写llms.txt,先拿工具扫一遍移动端性能。我习惯用核子GEO的网站对比功能,把自己站和竞品放一起看,LCP、CLS、FID哪项飘红就优先修哪项。

避坑清单

  1. 移动端LCP超过3s,AI爬虫大概率跳过,llms.txt写了也是白写
  2. 别急着搞llms.txt,先修性能——CDN、压缩、缓存三板斧
  3. 图片转WebP别用插件,手动用Imagick批量跑比插件省50%体积
  4. Nginx FastCGI缓存配置要加skip_cache规则,不然后台操作会被缓存坑死

避坑清单

坑1:拿PC端数据直接估移动端问题
我去年花两周优化了首页LCP,PC端降到1.8s,移动端还是4.2s。用Chrome DevTools模拟的3G网络根本不代表真实用户——移动端资源加载策略跟PC完全是两码事。
现在:我手机装了个WebPageTest的App,每次修改后直接拿真机测LCP、CLS、INP三个指标,低于阈值才上线。

坑2:以为llms.txt只是文件写写就行
有同行跟我说”放个llms.txt就能让AI爬虫看懂”,我踩进去了。真实情况是:这个文件必须跟robots.txt配合,而且格式要严格按规范写。我写了Disallow: /wp-admin/后,AI爬虫直接不抓取我的技术文档了,因为llms.txt没排除这个规则。
现在:我直接在llms.txt里明确写Allow: /docs/ /api/,同时把robots.txt的Disallow规则缩小到只屏蔽后台和临时目录。

坑3:对移动端跳转问题掉以轻心
我有个SaaS客户,移动端用户跳转页面时,URL从/docs/setup变成/m/docs/setup,结果Google索引的全是PC端URL。移动端跳出率78%有一半是这个原因。
修复:用<link rel="canonical" href="https://example.com/docs/setup" />固定每个页面的规范URL,移动端不再做独立UA跳转。

坑4:压缩图片但没管CLS
我把图片从2MB压到150KB,LCP从4.2s降到2.8s,但CLS还在0.35。查了半天,原来是我在CSS里用了background-image没给aspect-ratio,图片加载时撑开了布局。
解法:所有图片容器必须加aspect-ratio: 16/9或者用width+height硬性定义比例,CLS直接降到0.08。

坑5:以为AI爬虫只认结构化数据
我在技术文档里堆满JSON-LD,但AI引用率还是低。用核子GEO的结构化数据检测跑了一遍,发现我的FAQPage标记里缺了acceptedAnswer字段,而且所有链接标记都指向了PC端的/m/路径。
修复:确保结构化数据里的URL全部是Canonical版本,字段完整度100%后再让AI爬虫重新抓取——引用率两周内从12%涨到41%。

坑6:把移动端优化当一次性项目
我三个月前优化了移动端所有指标,以为一劳永逸。结果WordPress自动更新了主题,CLS又飙到0.4。更惨的是,我忘了给服务器加Cache-Control: public, max-age=31536000的头,资源缓存失效后LCP反弹到3.9s。
现在:每周用核子GEO的网站对比功能,拿优化前的截图跟当前版本比LCP、CLS变化,一旦差距超过20%就立刻排查。

坑7:忽视移动端交互延迟的隐形杀手
我用Google的Lighthouse测移动端,得分95,但用户反馈”点按钮没反应”。查了才发现:WordPress后台缓存插件没排除移动端CSS,导致它优先加载了桌面端样式,交互元素被覆盖了。
修复:在functions.php里加判断if (wp_is_mobile()) { wp_dequeue_style('desktop-only'); },移动端加载时间从2.1s降到0.7s。