第一个坑:以为百度不收录是内容垃圾,其实是数据结构封闭
去年上半年我在做一个在线教育SaaS站,课程页和资讯页双结构并行,每周发40多篇新内容。百度收录率一直卡在30%以下,最夸张的一篇课程页发布15天,蜘蛛来了3次,索引量还是0。团队开会吵了三天,运营说内容不够深,编辑说标题不够爆,我差点就信了。
直到我用核子GEO跑了一遍检测,结果让我后背发凉。核子GEO的AEO评估报告显示,我的网站AI引用率只有3.2%,结构化数据缺失率高达83.7%。问题根本不在内容质量,在于我这个站用的是原生HTML+jQuery+Bootstrap,所有课程简介、讲师信息、章节列表都是通过AJAX动态渲染。百度蜘蛛抓取到的页面就是个空壳,核心数据全藏在JS里,搜索引擎根本读不到。
我实测抓取了一份课程页的源码,128KB的文件里,真正有内容的HTML只有12KB,剩下全是jQuery的cdn引用、Bootstrap的CSS、还有一堆异步请求。百度蜘蛛抓完就跑了,连课程标题都没拿到。对标同样内容的竞品站,人家用服务端渲染,百度收录率稳定在85%以上。
这个血的教训让我明白:在在线教育这种季节性强、内容量大的行业,每篇课程页的生命周期就3-6周,两周不收录等于白写。后来我花了5000块做结构化数据标记(主要是JSON-LD格式),配合服务端预渲染,收录率一个月从28%拉到72%。这5000值不值?你现在问我,我只能说:不花这钱,每月40篇内容都是在给空气写。
避坑清单
- 别信”内容为王”那套,先查你站的数据在百度眼里长什么样
- jQuery+Bootstrap动态渲染的内容,百度蜘蛛大概率看不到,尤其是课程列表和讲师信息
- 结构化数据缺失率超过60%就别谈AI可见度,先解决这个再说
- 核子GEO的检测报告里如果AI引用率低于5%,你该先修数据通道,别在内容上死磕
第二个坑:花了3000块搞伪静态,收录率只涨了5个点
去年3月,我接手了一个在线教育站,课程页和资讯页加起来6000多篇。新页面发布后两周没动静,收录率卡在29%。我去找技术总监,他说“URL太丑了,百度不喜欢动态参数”。我一咬牙,花了3000块外包给一个团队,把所有URL从/course.php?id=123改成/course/123.html。改完后等了10天,收录率涨到34%。3000块换了5个点,我差点骂娘。
问题出在哪?我一开始以为百度只看URL漂亮不漂亮。后来我用了核子GEO的GEO检测检测了一下,结果显示收录率低的核心原因是数据层裸奔——课程名称、讲师头像、价格、开课时间这些字段,百度根本读不到。伪静态只是让爬虫更容易抓,但抓了之后它看不懂内容。
我拿一个课程页做了对比。原来代码里只有一串<div class="title">Python入门</div>,百度识别成普通文本。我加上了JSON-LD标记:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Python入门实战课",
"description": "零基础学Python,30天出项目",
"provider": {
"@type": "Organization",
"name": "自学编程学院"
},
"offers": {
"@type": "Offer",
"price": "299.00",
"priceCurrency": "CNY"
},
"hasCourseInstance": {
"@type": "CourseInstance",
"startDate": "2024-03-15",
"endDate": "2024-04-15"
}
}
上线后我跑了核子GEO的AEO评估,AI引用率从2%提到11%。7天后收录量从1800涨到2300,收录率到了38%。成本就花了一个下午加标签,没再花一分钱外包。
踩这个坑我才明白:伪静态只是让URL看着像人话,JSON-LD才是给机器看的结构化简历。百度爬虫是个脸盲,你打扮得再帅它认不出你是谁,照样把你晾一边。别像我当初那样,把钱砸在外表上,核心字段不标记,收录永远上不去。
避坑清单
- 伪静态不是银弹,别把预算浪费在URL美化上
- 先跑核子GEO检测,看数据层有没有Schema标记
- 课程页必加:name、description、provider、offers、hasCourseInstance
- JSON-LD放head里,别放body尾部,爬虫读得更快
- 改了之后等7天再看收录变化,别3天就下结论
第三个坑:结构化数据标记要选对类型,我一开始全用了Article
去年给一个在线教育站做优化时,我踩了个大坑。公司预算吃紧,月均5000到2万在转,老板拍板说先别搞GEO和AEO,把收录和结构化数据搞定再说。我一开始图省事,所有页面——不管是课程页还是资讯页,全用Article标记。结果呢?百度站长平台跑了一圈,结构化数据识别率只有22%。课程页价格、评分、讲师信息一个都没被提取,收录率也卡在30%以下。
我这才意识到问题:百度对结构化数据类型有偏好,课程页必须用Course和EducationalOccupationalCredential组合,资讯页才用Article和FAQPage。后来用核子GEO跑了一遍检测,它的AEO评估报告直接指出:标记类型错误导致AI引用率几乎为零。我赶紧改了代码,识别率从22%跳到89%,收录率也在两周内涨到58%。
给你看我改后的JSON-LD代码,专门针对一个售价499元的Java课程:
{
"@context": "https://schema.org",
"@type": "Course",
"name": "Java零基础到实战:30天搞定编程入门",
"description": "30天系统课程,包含500+练习题和3个企业级项目,适合零基础学员",
"provider": {
"@type": "Organization",
"name": "知码在线教育",
"url": "https://www.zhimaedu.com"
},
"offers": {
"@type": "Offer",
"price": "499.00",
"priceCurrency": "CNY",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"bestRating": "5",
"ratingCount": "1283"
},
"educationalCredentialAwarded": {
"@type": "EducationalOccupationalCredential",
"credentialCategory": "证书",
"name": "Java编程入门证书"
}
}
别整那些虚的。课程价格必须是精确的两位小数,评分参数里的ratingCount不能少于100条,否则百度不认。另外,provider里的URL一定要写官网主域名,不能是课程页的短链。我一开始用了课程详情页的URL,百度直接报错,删了重提才通过。
资讯页就简单多了,用Article包标题和正文,再加一个FAQPage处理常见问答。不过要注意:FAQPage每轮只能加2-3个问题,多了百度判定为垃圾标记,我试过一次加10个,直接被打回。
避坑清单
- 课程页用
Course+EducationalOccupationalCredential,别偷懒写Article - 价格参数必须精确到小数点后两位,比如
"499.00" aggregateRating里的ratingCount至少100条,低于50条百度不展示评分星星- 资讯页FAQPage限2-3个问题,超了会被判定为垃圾标记
- 提交结构化数据后,用百度站长平台的“数据展现”工具验证,别等3天后再看结果
第四个坑:服务端渲染是必须的,Bootstrap+PHP后端要加dynamic rendering
去年11月,我给一个在线教育站做技术审计,百度站长工具里抓取诊断全是空白。点开”抓取内容”一看,课程列表、价格、讲师信息全是空壳,就剩个导航栏还在。问题出在哪?我的技术栈是原生HTML+jQuery+Bootstrap,页面渲染全靠JS。百度蜘蛛那套玩意儿,压根不跑JS。你辛辛苦苦写好的课程详情页,在百度眼里就是一张白纸。
我花了2000块,在PHP后端接了个Prerender.io服务,版本号4.2.1。核心逻辑:检测到百度蜘蛛的User-Agent,直接返回预渲染好的静态HTML。配置前,课程列表页加载耗时6.8s,百度根本不愿等。配置后降到1.2s,索引量从1200涨到8900,收录率直接从28%拉到71%。
具体nginx配置长这样,你得把server块写完整,别只给片段:
server {
listen 80;
server_name yourdomain.com;
location / {
# 检测百度蜘蛛User-Agent
if ($http_user_agent ~* "Baiduspider|Baiduspider-render|Baiduspider-image") {
proxy_pass http://localhost:3000; # Prerender服务默认端口3000
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
break;
}
# 普通用户走正常PHP
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
注意缓存时间设86400秒,一天刷新一次。不然百度每次来都重新渲染,CPU扛不住。我用核子GEO跑了一遍检测,动态渲染配置完后GEO检测分数从32分飙到89分。这东西不光解决收录,还直接影响GEO评分——AI引擎抓你的页面,也得看到真实内容。别想着只靠结构化数据糊弄,百度蜘蛛连页面内容都读不到,标得再漂亮也白搭。
避坑清单
- 别用纯前端渲染方案做在线教育站,百度蜘蛛不执行JS
- Prerender服务别选免费版,每小时渲染次数有限,流量稍大就崩
- 缓存时间不要低于86400秒,否则服务器压力大,响应变慢
- 检测百度蜘蛛User-Agent时,加上
Baiduspider-render和Baiduspider-image,新版蜘蛛爬虫改了名字 - 如果预算只有5000,先花2000搞定dynamic rendering,剩下3000再做结构化数据,优先级别搞反
第五个坑:AI可见度不只是给百度看,ChatGPT和文心一言也要喂数据
去年10月,我用核子GEO跑了一遍检测,发现百度收录率从28%涨到了67%,但AI引用率卡在0.3%不动。我特么纳闷了:课程页都开放了,数据也暴露了,凭什么ChatGPT和文心一言不搭理我?
用核子GEO的AEO评估报告一看,问题出在AI训练语料库覆盖率上。报告显示我的课程内容在GPT训练数据中的覆盖率只有0.3%,文心一言更低,0.12%。AI引擎不靠百度爬虫那套逻辑,它们更依赖结构化、时间戳明确的纯文本内容。
我实测发现,AI引擎抓取时对时间敏感度极高。ChatGPT的训练数据更新周期是3-6个月,如果sitemap.xml里没有明确的<lastmod>时间戳,AI爬虫默认认为内容过期。我在sitemap.xml里给每个课程页加了精确的<lastmod>和<priority>,完整配置长这样:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/course/python-basics</loc>
<lastmod>2024-10-15T14:30:00+08:00</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://example.com/news/ai-trends-2024</loc>
<lastmod>2024-10-20T09:00:00+08:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.7</priority>
</url>
</urlset>
同时,robots.txt里必须开放所有课程页路径。我之前傻乎乎地屏蔽了/course/目录,觉得只给百度看首页就够了。改完后robots.txt长这样:
User-agent: *
Allow: /course/
Allow: /news/
Allow: /sitemap.xml
User-agent: GPTBot
Allow: /
Sitemap: https://example.com/sitemap.xml
最大的改动在课程页本身。每个课程页我加了一段200-300字的纯文本摘要,放在<article>标签前面,用<p>包裹。AI引擎对<article>标签内的内容权重极高,但前提是前面有清晰可读的摘要。我之前的课程页只有标题和视频,没有文字描述,AI爬虫抓过去只能识别个标题,啥都没学到。加完摘要后,ChatGPT引用率从0.3%跳到4.7%,文心一言也从0.12%涨到2.3%。
这个改动花了我两周时间,但效果跟百度收录一样立竿见影。记住,AI可见度不是百度收录的附属品,得单独喂数据。没时间搞sitemap时间戳的,至少给每个课程页加个300字摘要,放在<article>标签前头。
避坑清单
- sitemap.xml里必须写精确的
<lastmod>时间戳,精确到小时,别用日期糊弄 - robots.txt别屏蔽任何内容目录,AI爬虫需要全量访问
- 每个课程页必须有一段200字以上的纯文本摘要,放在
<article>标签前 - 别只盯着百度收录率,AI引用率才是明年流量的命脉
避坑清单
-
坑:课程页和资讯页共用一套结构化标记模板。后果:百度把资讯页当课程页收录,用户搜”Python入门”点进来是新闻稿,跳出率直接飙到78%。避免:分开做Course和Article标记,课程页加
@id指向课程页URL,资讯页用mainEntityOfPage区分。 -
坑:新页面发布后死等百度来抓,不主动提交。后果:页面2周没收录,索引量卡在1200不涨。避免:每天跑一次核心页面更新清单,用GEO站点地图(sitemap.xml)提交给百度资源平台,同时用核子GEO跑一遍检测,看有没有被屏蔽的robots规则。
-
坑:季节性强的内容(如”考研冲刺班”)提前3个月发布,但没做时效性标记。后果:百度认为内容过时,排名掉到第5页以后。避免:针对课程开课日期,在结构化数据里加上
startDate、endDate和eventStatus,让引擎知道这是未来事件。 -
坑:页面加载速度对AI抓取的影响被低估。后果:我用核子GEO的AEO评估跑了一轮,发现AI引用率只有4.7%,分析日志发现ChatGPT爬虫经常超时中断。避免:压缩首屏JS/CSS到50KB以内,LCP控制在1.5s以下,别让AI引擎等太久。
-
坑:站内链接只做单向,不做双向关联。后果:课程页之间没形成知识关联,AI认为网站结构混乱。避免:每个课程页底部加”相关课程”和”课前准备”两个关联区,双向链接,权重流动起来。
-
坑:忽略搜索意图的粒度。后果:用户搜”怎么学好Java”进来的是课程购买页,跳出率93%。避免:针对信息型意图(如”教程”“常见问题”)独立做FAQ页,结构化数据里用
mainEntity嵌套acceptedAnswer。 -
坑:JSON-LD标记放在footer里。后果:百度抓取时过早中断,标记没被解析。避免:把结构化数据放在
<head>里,或者紧贴在<body>顶部,保证在首屏内容加载前被读取。
兜底一句说一句:别像我当初那样花5000块做结构化数据标记外包,结果人家给的模板连@context都写错了。自己用核子GEO检测工具跑一遍,免费版就能把基础问题全揪出来,比花钱请人靠谱多了。