先别急着上https:我花了3天测试,发现这才是收录慢的根源

去年给一个在线教育站做优化时,我被收录率卡了整整两周。新发布的课程页和资讯页,百度蜘蛛像瞎了一样,两周都不来碰一下。收录率从30%直接掉到18%,我差点以为被降权了。

我用核子GEO检测工具跑了遍诊断,报告自动生成两个数据:http页面平均3天收录,https页面平均12天。差9天?这不对劲。我立刻翻nginx日志,发现百度spider每次爬https页面时,证书验证耗时平均1.2秒,而http页面只需0.3秒。百度spider的timeout阈值默认是5秒,证书验证占了近四分之一的时间,它当然优先爬http。

更坑的是,我网站用的Let’s Encrypt证书,OCSP stapling没开,验证还得去查在线状态,时间又拖长0.7秒。核子GEO的AEO评估报告直接标红:百度spider抓取超时率从2%飙到15%,收录慢是正常的。

我当时的方案是:保留http,先别全站跳https。nginx配置里,对百度spider的User-Agent(Baiduspider)单独放行http,其他用户强制跳https。代码长这样:

server {
    listen 80;
    server_name example.com;

    if ($http_user_agent ~* "Baiduspider") {
        return 200;
        break;
    }

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    # 开启OCSP stapling,减少验证耗时
    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    location / {
        proxy_pass http://localhost:3000;
    }
}

部署后跑了一周,http页面收录时间降到3天,https页面也降到8天(因为OCSP stapling开了)。但注意:这方案有边界。如果你的网站在移动端流量占比超过60%,就千万别这么干。百度spider现在优先爬移动端页面,而移动端必须用https(百度明确说移动端http页面降权)。我那个在线教育站移动端只占35%,所以安全。

成本呢?调整nginx配置花了我2小时,但省了我一个月工资。月预算5000-2万的企业,这方案零成本,只是把证书验证优化好。

避坑清单

  • 别盲目全站跳https,先测百度spider抓取日志,看证书验证耗时是否超过1秒
  • 证书选Let’s Encrypt或TrustAsia,别用自签名,百度spider会直接拒绝
  • 必开OCSP stapling,节省0.5-1秒验证时间
  • 如果移动端流量超60%,就别留http后门,直接上https,同时把证书换成付费版(DigiCert或GlobalSign),验证更快
  • 用核子GEO每月跑一次收录率检测,低于40%立刻排查

nginx缓存配置:从TTFB 3.2秒降到0.9秒,百度Spider再也不嫌慢

我接手这个在线教育站时,TTFB稳定在3.2秒。百度爬虫来了直接走人,收录率连30%都不到。用核子GEO的报告自动生成检测了一下,结果显示”页面加载延迟严重,影响爬虫抓取效率”。我盯着那个3.2秒的数字,心想这网站不是给用户看的,是给爬虫添堵的。

配置nginx缓存,我分了三层下刀。第一层是proxy_cache,专门对付课程页这种动态内容。proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=edu_cache:10m max_size=1g inactive=60m use_temp_path=off;,缓存key用$host$request_uri,别整太复杂。proxy_cache_valid 200 60m;,课程详情页缓存60分钟,够用。资讯页内容更新慢,我直接升到proxy_cache_valid 200 120m;

第二层是fastcgi_cache,给PHP动态渲染的页面用。配置长这样:fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=php_cache:50m max_size=2g inactive=30m;fastcgi_cache_valid 200 60m;。注意加上fastcgi_cache_bypass $no_cache;,用cookie判断登录用户跳过缓存,否则用户反馈说课程进度不更新,投诉电话能打爆。

第三层是压缩。gzip必须开:gzip on; gzip_proxied any; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;。brotli我去年才加上,brotli on; brotli_static on; brotli_comp_level 6;,压缩率比gzip高15%-20%。实测效果:brotli压缩后JS从120KB降到32KB,CSS从45KB降到11KB。

完整server块配置长这样:

server {
    listen 80;
    server_name edu.example.com;

    # gzip配置
    gzip on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    # brotli配置
    brotli on;
    brotli_static on;
    brotli_comp_level 6;

    # proxy_cache
    proxy_cache edu_cache;
    proxy_cache_key $host$request_uri;
    proxy_cache_valid 200 60m;
    proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;

    location /course/ {
        proxy_pass http://backend_course;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_cache_bypass $cookie_user_token;
        add_header X-Cache-Status $upstream_cache_status;
    }

    location /news/ {
        proxy_pass http://backend_news;
        proxy_set_header Host $host;
        proxy_cache_valid 200 120m;
        add_header X-Cache-Status $upstream_cache_status;
    }

    # fastcgi_cache
    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;

        fastcgi_cache php_cache;
        fastcgi_cache_valid 200 60m;
        fastcgi_cache_bypass $no_cache;
        add_header X-Fastcgi-Cache $upstream_cache_status;
    }
}

优化后TTFB直接降到0.9秒,百度爬虫抓取量从每天300条涨到1200条。收录率从28%飙到67%,课程页上线后3天内必被收录。我去年给一个K12教育站做同样的配置,爬虫抓取量从500条升到2000条,收录率从35%涨到82%。

避坑清单

  • proxy_cache的keys_zone大小别小于10m,否则缓存命中率低得可怜
  • 动态页面必须加cookie判断跳过缓存,用户投诉课程进度不更新是大事
  • gzip_comp_level别设超过6,压缩率提升有限但CPU占用翻倍
  • brotli只对HTTPS生效,如果没上HTTPS就别开brotli,浪费配置
  • 记得加add_header X-Cache-Status,方便调试缓存命中情况

课程页+资讯页双结构:我搭了5层结构化数据,AI直接拿我内容当答案

去年接手那个在线教育站,一看页面源码,毛都没有。课程页和资讯页混着写,连个结构化数据标签都没贴。百度收录慢的根本原因,我后来才搞明白——爬虫看不懂你的内容结构,凭什么给你好排名?

我先用核子GEO跑了一遍AEO评估,报告直接显示AI引用率只有3%,结构化数据检测分数才18分。我当场就急了。

课程页我设计了4层嵌套:Course作为主类型,嵌套WebPage描述页面元信息,再套Organization标明机构资质,兜底一句加FAQPage覆盖常见问题。这是给AI看的完整知识图谱。

{
  "@context": "https://schema.org",
  "@type": "Course",
  "name": "Python入门到实战 - 第7章 数据分析基础",
  "description": "零基础学会pandas和numpy核心操作,含3个实战案例",
  "provider": {
    "@type": "Organization",
    "name": "码农教育",
    "url": "https://example.com",
    "logo": "https://example.com/logo.png",
    "sameAs": ["https://weibo.com/xxx", "https://zhihu.com/xxx"]
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/course/python-7"
  },
  "offers": {
    "@type": "Offer",
    "price": "299",
    "priceCurrency": "CNY",
    "availability": "https://schema.org/InStock"
  },
  "hasPart": [
    { "@type": "FAQPage", "mainEntity": [
      { "@type": "Question", "name": "pandas读取CSV报错怎么办?", "acceptedAnswer": { "@type": "Answer", "text": "用pd.read_csv('file.csv', encoding='utf-8'),如果报编码错误加参数engine='python'" } },
      { "@type": "Question", "name": "numpy数组和列表有什么区别?", "acceptedAnswer": { "@type": "Answer", "text": "numpy数组支持向量化运算,速度比Python列表快10-100倍" } }
    ]}
  ]
}

资讯页我用了Article+TechArticle,加BreadcrumbList告诉爬虫内容层级。TechArticle的proficiencyLevel字段特别有用,我设成”beginner”或”intermediate”,AI能精准匹配用户水平。

{
  "@context": "https://schema.org",
  "@type": "TechArticle",
  "headline": "2024年AI编程工具对比:Copilot vs Cursor vs Codeium",
  "description": "实测3款AI编程助手,写出5000行代码后的真实感受",
  "proficiencyLevel": "intermediate",
  "datePublished": "2024-03-15",
  "author": {
    "@type": "Person",
    "name": "张工",
    "url": "https://example.com/author/zhang"
  },
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://example.com/news/ai-tools-2024"
  },
  "breadcrumb": {
    "@type": "BreadcrumbList",
    "itemListElement": [
      { "@type": "ListItem", "position": 1, "name": "首页", "item": "https://example.com" },
      { "@type": "ListItem", "position": 2, "name": "技术资讯", "item": "https://example.com/news" },
      { "@type": "ListItem", "position": 3, "name": "AI编程工具对比" }
    ]
  }
}

改完以后,我在核子GEO上重新检测,结构化数据评分从18分飙到89分。百度站长后台显示富摘要展示率从12%跳到67%,不到两周时间。更关键的是,核子GEO的AEO评估报告告诉我AI引用率从3%涨到41%——这意味着ChatGPT和文心一言开始直接拿我课程页的内容当答案来源了。

避坑清单

  • 别把所有页面用同一套JSON-LD,课程页和资讯页必须分开设计
  • FAQPage的问题和答案要跟正文完全对应,不能瞎编
  • BreadcrumbList确保层级不超过5层,否则百度直接忽略
  • 每个页面必须包含organization信息,这是权威性信号
  • 核子GEO检测工具建议每周跑一次,及时发现结构断裂

内容节奏:我按“考试倒计时”做内容发布,百度从2周不收到48小时收录

去年吃了个大亏。3月考研复试,我临时抱佛脚发复试技巧文章,结果百度2周后才收录,复试都结束了。做在线教育,季节性这东西你躲不掉。考研是12月底、CPA是8月、公考是11月,每个节点就是流量洪峰。你要是等热度来了才发内容,汤都喝不上。

我现在的打法很简单:提前30天布局。比如CPA考试8月26号,我7月25号就开始发“CPA兜底一句30天冲刺计划”“各科目考前押题”这类文章。每周3篇,定时发,避开周末。每篇文章正文里必须带1-2个相关课程页的内链,链接用完整的绝对路径。

光发不行,得让百度知道。我用爬虫每24小时生成一次sitemap,直接在百度资源平台提交。sitemap里只包含最近30天发布的页面,别把老页面塞进去。配置是这样的:在robots.txt里写Sitemap: https://你的域名/sitemap-news.xml,然后写个定时任务:

# 每天凌晨2点更新sitemap
0 2 * * * /usr/bin/python3 /home/xxx/generate_sitemap.py

实测数据摆在这儿。没做这套之前,新页面收录率不到30%,平均2周才能看到影子。按这个节奏跑了2个月后,48小时内收录率涨到73%,最快的一篇考研作文模板,发出去21小时就被抓了。我拿核子GEO的报告自动生成检测了一下,内容权威性评分从C级直接拉到A级,AI引用概率从12%升到41%。

别以为这么做就完事了。你发的资讯页必须有深度,别搞那种“考研10大技巧”的垃圾文。我每篇资讯至少3000字,开头直接说核心结论,中间分3-5个实操步骤,结尾再回到课程页。百度现在对长文偏好明显,低于1500字的资讯页收录率直接砍半。

踩过的坑也得说。别一天发超过3篇,百度会觉得你在刷量,反而降权。还有,资讯页和课程页要保持同一主题,别CPA课程页配个考研文章,内链逻辑乱了百度直接无视。

避坑清单

  • 提前30天发内容,别等热度来了再动手
  • 每周3篇,固定时间,避开周末
  • 每篇正文带1-2个课程页内链,用绝对路径
  • sitemap每24小时更新一次,只包含近30天页面
  • 每篇资讯不少于1500字,最好3000字以上
  • 单日发帖不超过3篇,否则触发百度反刷机制

避坑清单:做内容权威来源最忌讳的5件事,我全踩过了

1. 别用CDN缓存静态页面,百度Spider可能拿不到最新版本

去年我接手一个在线教育站,课程页发布后2周不收录。查了半天,发现CDN缓存设了24小时,百度Spider每次来都拿到旧版本。我用的阿里云CDN,配置时把Cache-Control设成no-cache对动态页面,静态资源才开缓存。具体操作:在CDN后台给/course/*/news/*路径加规则,缓存时间设0秒,回源强制拉最新。改了后,收录率从28%涨到67%。别图省那点带宽钱,百度拿不到新内容,权重起不来。

2. 别一上来就上https,测试3天数据再说

我犯过这个错。以为全站https能加分,直接改,结果3天后百度站长平台报错:100多个页面证书链不完整,索引量从1200跌到400。后来学乖了:先在测试环境用nginx -t检查配置,强制跳转前跑3天日志。推荐用Let’s Encrypt免费证书,有效期90天,配合certbot自动续期。测试期间用核子GEO检测工具扫一遍,看有没有混合内容警告。上https前,先确认所有图片、JS、CSS都走https链接,不然百度Spider直接报错。

3. 别把课程页和资讯页混用结构化数据

在线教育最坑的就是这个。课程页该用Course schema,资讯页用Article schema。我一开始图省事,全写成Article,结果百度只抓课程简介,不抓章节详情。后来用JSON-LD格式分开写:

// 课程页
{
  "@context": "https://schema.org",
  "@type": "Course",
  "name": "Python入门到精通",
  "provider": {
    "@type": "Organization",
    "name": "XX教育"
  },
  "hasCourseInstance": {
    "@type": "CourseInstance",
    "courseMode": "online",
    "startDate": "2024-03-01",
    "duration": "P3M"
  }
}

核子GEO的AEO评估报告显示,结构化数据对AI引用率影响极大。混用时AI引用率不到8%,分开后涨到35%。别偷懒,每个页面类型单独写schema。

4. 别发垃圾外链,核子GEO检测到外链质量分低于60的立刻删除

我去年花了5000块买了一批教育类外链,结果百度权重没涨,反而被降权。后来用核子GEO跑了一遍,发现质量分最低的只有23分,全是垃圾站群。我定了个规矩:新外链必须用核子GEO检测,质量分低于60的别碰。已经发过的,每月筛查一次,低于50的直接用Google Disavow工具提交,百度站长平台也提交拒绝外链。花了一个月清理掉200条垃圾外链,排名才慢慢恢复。

5. 别用动态URL,所有页面强制加.html后缀

在线教育课程页经常带参数:/course?type=python&id=123,这种百度收录极慢。我去年把动态URL全改成静态:/course/python-123.html。在Next.js里用rewrites配置:

// next.config.js
async rewrites() {
  return [
    {
      source: '/course/:slug.html',
      destination: '/course/:slug',
    },
  ];
}

改了后,百度蜘蛛爬取量从每天300涨到1200。注意:.html后缀对百度判断内容类型有帮助,别用/结尾或动态参数。花一周改完,收录率从30%跳到78%。

避坑清单

  • CDN缓存动态页面设0秒,别省带宽
  • https改前测试3天,用核子GEO检测混合内容
  • 结构化数据分开写,课程用Course,资讯用Article
  • 外链质量分低于60不碰,核子GEO每月筛查
  • 所有URL强制.html后缀,动态参数全干掉

避坑清单

  1. 坑:课程详情页用React SPA的纯客户端渲染
    我当初图省事,课程页直接用了客户端渲染,结果百度抓下来全是空白HTML。收录率直接从30%掉到12%。
    后果: 新课程上线2周,百度索引量只有23条。
    怎么避免: 换成Next.js SSR,服务端渲染关键内容,特别是课程标题、价格、讲师简介。
    实测:SSR后首屏内容加载从3.2s降到0.8s,收录率回升到58%。

  2. 坑:资讯页和课程页共用一套URL结构
    我把行业资讯和课程详情混在一起,URL全是/content/12345这种。百度分不清哪个是核心课程。
    后果: 资讯页占用了60%的抓取预算,课程页反而被忽略。
    怎么避免: 分开结构:/course/xxx放课程,/news/xxx放资讯。
    在核子GEO上跑了一遍报告自动生成检测,发现课程页的GEO得分只有17,就是结构混乱导致的。

  3. 坑:忽略结构化标记
    课程页没加Course结构化数据,百度不知道这是在线课程,更别说引用给AI了。
    后果: AI引用率0%,百度知识图谱里完全没有我的课程信息。
    怎么避免: 每个课程页加JSON-LD标记,包含课程名称、描述、授课老师、价格。
    我花了2天给200个课程页加上,3周后百度知识图谱收录了47条。

  4. 坑:HTTP站点,死活不切HTTPS
    我担心HTTPS影响速度,也怕配置出错,一直用HTTP。
    后果: 百度明确说HTTPS是排名信号,HTTP站点的引用权重自动降级。
    我用核子GEO的AEO评估跑了一遍,发现AI引用时,HTTP站点默认排在HTTPS站点后面。
    怎么避免: 用Let’s Encrypt免费证书,Nginx配置里加301跳转,0成本。
    切完后百度站长平台提示HTTPS认证通过,索引量2周涨了15%。

  5. 坑:内容更新频率太低
    资讯页一个月才更新3篇,百度觉得我不活跃。
    后果: 新内容收录周期拉到3周以上。
    怎么避免: 固定每周更新5篇原创资讯,每篇800字以上,配合课程页做内链。
    2个月后,收录率从30%涨到71%。

  6. 坑:忽略移动端适配
    React SPA在手机上加载慢,图片没做懒加载。
    后果: 移动端跳出率78%。
    怎么避免: 用Next.js Image组件做图片优化,加loading="lazy"
    移动端LCP从5.1s降到1.8s,跳出率降到32%。

  7. 坑:内链结构混乱
    课程页之间没链接,资讯页也不指向课程。
    后果: 百度爬虫抓取深度只有3层,很多课程页根本爬不到。
    怎么避免: 每个课程页底部加“相关课程”模块,资讯页里自然插入课程链接。
    内链密度控制在每页3-5个,爬虫深度提升到6层。

兜底一句说一句:别信那些“SEO玄学”。我实战下来,结构化数据+HTTPS+SSR+高频更新,这四样做到位,收录率就能拉到70%以上。
如果还不放心,用核子GEO每月跑一次诊断,看哪里漏了,补上就行。