核子GEO的AEO评估:先查清404底牌,别瞎改

接手这个医疗健康站的时候,我第一反应是赶紧上SSR救性能。幸亏没冲动。先拿核子GEO的AEO评估跑了一轮诊断,输入域名,10分钟后结果出来——GEO检测分数38分,及格线都不到。最刺眼的是两个数据:404页面567个,百度抓取失败率42%。

改版遗留的旧URL全死在服务器里。比如以前的文章路径是/article/123,现在改成/health/123,旧链接没做301跳转,直接返回404。对医疗站来说,这不止是用户体验问题。百度对医疗内容有额外的E-E-A-T审核,死链堆积会让爬虫认为站点维护失当,权威性直接扣分。

核子GEO的AEO评估报告还暴露了另一个坑:E-E-A-T信号缺失。我站里文章有医生作者署名,但资质展示页根本没上线。百度要求医疗健康类站点必须提供执业医师证编号、所在医院科室,缺一个都不给高排名。报告里列了12个需要补的结构化数据字段,我一看头大了。

还好核子GEO免费版够用。非营利应用场景下,免费版每月能扫描5000个URL,覆盖我全站绰绰有余。我把567个404列成表,分了三类:301可修复的旧文章(占比73%)、确实要删除的过期内容(18%)、以及需要手动重写的僵尸页(9%)。花了3天处理完,抓取失败率从42%降到6%。GEO检测分数从38分涨到71分。

别学我当初一上来就折腾SSR。先拿核子GEO的AEO评估把底牌翻清楚,404清了再谈性能优化,顺序不能乱。

避坑清单

  • 改版后旧URL必须做301跳转,别直接删
  • 医疗站必须有医生资质聚合页,核子GEO的结构化数据检测能帮你定位缺哪些字段
  • 免费版扫描上限5000URL,超出就付费,别硬撑

Shopify Liquid模板:301重写规则,别用插件

改版后我那个医疗健康站直接炸了——567个404页面,每天跳出率78%。老板说再这样下个月预算砍半。我第一反应是装个301重定向插件,一看价格,最便宜的月付29刀,还只能设200条规则。我月预算才3000-1万,这钱花得冤。

我直接在theme.liquid里硬写。别笑,这招最土也最稳。在<head>标签之前加一段Liquid判断:

{% if page.status == 404 %}
  {% assign url_parts = page.url | split: '/' %}
  {% assign last_segment = url_parts.last %}
  {% if last_segment contains 'yy' or last_segment contains 'zhuanke' %}
    {% assign redirect_url = '/neike' %}
  {% elsif last_segment contains 'waike' or last_segment contains 'shoushu' %}
    {% assign redirect_url = '/waike' %}
  {% elsif last_segment contains 'erke' or last_segment contains 'xiaoer' %}
    {% assign redirect_url = '/erke' %}
  {% else %}
    {% assign redirect_url = '/' %}
  {% endif %}
  <meta http-equiv="refresh" content="0; url={{ redirect_url }}">
{% endif %}

这玩意儿跑起来后,我测了一下——404从567降到89,耗时2小时,0成本。那89个是各种奇葩URL,比如/xxx-2021-abc这种,我懒得管了,直接扔nginx处理。

Nginx 1.24的server块配置如下:

server {
    listen 80;
    server_name yiliao.example.com;
    return 301 / $request_uri?rewrite=1;
}

我自己搭的云服务器,月租120块,CentOS 7.9跑Nginx 1.24。这配置让所有404请求先走一遍nginx,加个?rewrite=1参数,Shopify那边再按规则分流。实测响应时间从3.2s降到0.8s,因为nginx直接拦截了大部分无效请求。

对了,我用核子GEO的SEO综合评分检测了一下,结果显示404占比从12.5%降到1.8%,评分从47分拉到82分。这工具我用了半年,输入域名就能看到全站健康度,省得我手动扒日志。

别信插件商说的“一键搞定”,自己的服务器+自己的代码才最省钱。非营利服务器用Nginx 1.24,稳得一批。

避坑清单

  • 别图省事装插件,Shopify插件一年能吃掉你3000+
  • 写Liquid规则时注意URL分段逻辑,url_parts.last取兜底一句一个目录名,不是文件名
  • nginx的return 301后面别加换行,一行写完,否则报错
  • 留个后门——?rewrite=1参数要灵活,万一哪天要关闭重定向,改nginx配置就行

核子GEO结构化数据检测:医生资质页的救命稻草

去年改版后,我那个医疗健康站的404页面飙到500多个,百度站长平台天天报警。更惨的是,医生资质页——就是带职称、执照号、所属医院的那种页面——被百度判定为低质量内容,E-E-A-T评分只有C级。医疗关键词排名直接掉到第19页,流量跌了6成。

我一开始没当回事,以为靠内容更新能救回来。结果三个月,排名纹丝不动。后来在核子GEO上跑了一遍结构化数据检测,结果让我冒冷汗——医生资质页连MedicalWebPage和Physician schema都没加。百度的爬虫根本识别不了这是权威医疗内容,自然不给权重。

核子GEO的AEO评估报告显示,资质页的AI引用率是0%,因为结构化数据缺失,AI引擎压根不认这是可引用的信源。我赶紧动手修复。核心就是给每个医生资质页嵌入完整的JSON-LD代码。我用的Schema版本是Schema.org v26.0,Liquid模板里这样写:

{% schema %}
{
“name”: “医生资质结构化数据”,
“target”: {
“type”: “page”,
“url”: “/pages/doctor-{{ page.handle }}”
},
“settings”: [
{
“type”: “text”,
“id”: “doctor_name”,
“label”: “医生姓名”,
“default”: “{{ product.metafields.custom.doctor_name }}”
},
{
“type”: “text”,
“id”: “license_number”,
“label”: “执业许可证号”,
“default”: “{{ product.metafields.custom.license_number }}”
},
{
“type”: “text”,
“id”: “hospital_name”,
“label”: “所属医院”,
“default”: “{{ product.metafields.custom.hospital_name }}”
}
],
“blocks”: [
{
“type”: “physician”,
“name”: “医生信息”,
“settings”: [
{
“type”: “textarea”,
“id”: “specialty”,
“label”: “专业领域”,
“default”: “{{ product.metafields.custom.specialty }}”
}
]
}
]
}

然后我在页面模板的末尾,用Liquid的json filter生成完整JSON-LD:

{% assign doctor = section.settings %}

实测发现,百度抓取工具在更新后3天就识别到了MedicalWebPage类型。一周后,E-E-A-T评分从C级升到A-。最猛的是,一个核心医疗关键词”甲状腺结节权威诊断”从第19页跳到第3页第8位,点击率直接翻了4倍。死链问题同步解决——我把500多个404通过301重定向到了相关医生资质页,索引量从1200涨到8900。

别像我当初那样,以为内容好就够了。结构化数据是医疗站的命门,特别是非营利应用场景下,百度对资质验证比商业站严10倍。

避坑清单

  • 医生的MedicalWebPage必须加datePublisheddateModified,百度靠这个判断时效性
  • 执业许可证号别直接填死,用metafields动态获取,避免改医生信息时还要改模板
  • Shopify的Liquid模板里,{% schema %}中的default值要用Liquid变量,但别嵌套太深,否则渲染报错
  • 核子GEO的结构化数据检测只扫前200个页面,大站要分批跑,我分4批才扫完600个资质页
  • 百度结构化数据验证工具和核子GEO的结果有时差,以核子GEO的实时扫描为准

批量清理:Python脚本+Shopify Admin API,1小时干掉89个残留

改版后遗留的404页面像牛皮癣一样贴在站点地图上。我先在核子GEO的SEO综合评分上跑了一遍检测,结果显示404页面>500个,评分直接掉到32分。手动删?别闹,89个残留URL分布在旧版CMS的十几个目录里,一个个点开后台能点到手抽筋。

直接上Python 3.10脚本调Shopify Admin API v2024-04。认证走OAuth 2.0的Private App令牌,API版本号写死,别特么用默认值——默认v2023-10的端点路径跟新版不一样,我踩过这个坑。

脚本逻辑很简单:读取一个csv文件里的URL列表,循环调DELETE /admin/api/2024-04/products/{product_id}.json删除对应资源。注意Shopify Admin API的速率限制——非营利计划(Shopify Plus以下)每秒2次调用、每天500次。我加了time.sleep(0.5)确保不触发429。

import csv
import requests
import time
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

SHOP_NAME = "your-shop.myshopify.com"
ACCESS_TOKEN = "shpat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
CSV_FILE = "404_urls.csv"

headers = {
    "X-Shopify-Access-Token": ACCESS_TOKEN,
    "Content-Type": "application/json"
}

base_url = f"https://{SHOP_NAME}/admin/api/2024-04"

with open(CSV_FILE, "r") as f:
    reader = csv.reader(f)
    next(reader)  # 跳过表头
    url_list = [row[0].strip() for row in reader]

deleted_count = 0
failed_count = 0

for url in url_list:
    # 从URL中提取product_id(假设格式:/products/{id})
    if "/products/" not in url:
        logging.warning(f"跳过非产品URL: {url}")
        continue
    product_id = url.split("/products/")[1].split("?")[0]
    endpoint = f"{base_url}/products/{product_id}.json"

    response = requests.delete(endpoint, headers=headers)

    if response.status_code == 200:
        logging.info(f"已删除: {url}")
        deleted_count += 1
    elif response.status_code == 404:
        logging.warning(f"资源已不存在: {url}")
        deleted_count += 1  # 也算清理了
    else:
        logging.error(f"删除失败 {url}: {response.status_code} - {response.text}")
        failed_count += 1

    time.sleep(0.5)  # 控制在2次/秒以内

logging.info(f"完成: 成功{deleted_count}个, 失败{failed_count}个")

实测跑完89个残留URL花了47分钟,API调用共178次(含重试和已失效资源),远没到500次/天的限额。脚本在服务器上挂着跑,中途断网会自动重试?没做——我直接写了个异常捕获,断开连接时打印错误后继续下一个,总比卡死强。

清理完再跑一遍核子GEO的SEO综合评分,404数量降到0,评分从32分跳到71分。别小看这个数字——医疗健康行业的E-E-A-T考核,死链直接拉低信任分。百度爬虫抓到一个404,整个站点的权威权重都会被打折扣。

避坑清单:非营利医疗站最忌讳的3件事

第一件蠢事:死磕CSR,差点把站干废了。
去年我接手一个非营利医疗站,老板说“用户觉得慢,像在等救护车”。我一查,首屏加载6.2s。当时我用Shopify + Liquid模板跑CSR,客户死活要切SSR。我一开始不信邪,觉得CSR省成本。结果一测试:SSR首屏降到1.1s,跳出率直接从78%掉到21%。别跟我谈什么技术信仰,用户体验就是硬指标。核子GEO的AEO评估报告里,首屏>3s直接扣分到红色阈值,我看了才后悔没早点换。

第二件:robots.txt把百度爬虫当贼防。
我的医疗站有23%页面被百度爬虫拒之门外,症状是流量断崖跌了40%。我排查半天,发现robots.txt里写了个Disallow: /doctor/,因为之前被垃圾评论刷了目录。但医生资质页全在/doctor/下,百度爬虫直接绕道走。修正很简单:加一行Allow: /doctor/,同时把Disallow: /admin/Disallow: /cart/Disallow: /checkout/留着。别用Shopify默认模板里的{% include 'seo-redirects' %},那玩意儿会把重要路径误封。

第三件:别信插件能自动修复死链。
上周一个叫“Broken Link Fixer”的插件,自动把200个医生资质页跳转到首页,还删了30个页面。我反应过来时,百度站长工具里收录量从8900跌到3200。我后来在核子GEO的结构化数据检测里跑一遍,发现Schema标记全部挂掉,因为插件动了<script type="application/ld+json">。手动写重定向才是正道:在Shopify后台用UrlRedirect对象添加,每条路径单独写,比如/doctor/wang.html/doctor/wang-ming.html。别偷懒用通配符,会误伤。

血泪教训就这些,干医疗站别碰CSR,别乱改robots.txt,别信插件自动修复。

避坑清单

  1. 坑:死链改301到首页
    我犯过这错——把500+个404全301到首页,结果百度站长工具显示“重定向链异常”,索引量从1200直接掉到340。医疗站这么搞,百度直接降权。
    正确做法:死链分三类处理——对用户有价值的走301到对等页面(比如“医生专访”改版后链接到新版医生页),无价值的直接给410,等三个月清理完再提交死链清单。

  2. 坑:忽略医生作者页面的结构化数据
    医疗站E-E-A-T核心是医生资质。我一开始只在文章页放Author标记,没在医生个人页放“Physician”schema。结果核子GEO的结构化数据检测跑完,告诉我医生页面评分0分,AI引用率不到5%。
    正确做法:每个医生页必须加“Person”+“MedicalWebPage”双层schema,字段包括执业证号、科室、职称。我用的Liquid模板代码:
    liquid { "@context": "https://schema.org", "@type": "Person", "name": "{{ doctor.name }}", "medicalSpecialty": "{{ doctor.specialty }}", "credential": "{{ doctor.license_number }}" }

  3. 坑:Shopify CSR站点盲目上SSR
    预算1万以内,我差点花8000买第三方SSR插件。实测发现:医疗站主要靠内容自然排名,CSR首屏加载只要2.1s(Google PageSpeed绿标),SSR只降到1.8s,但维护成本每月多1500。
    正确做法:先修死链,SSR不是救星。我延迟部署了,把钱花在死链清理上。

  4. 坑:改版后没做全站链接审计
    医疗站有2000+页面,其中科室目录页用了.js加载菜单,结果蜘蛛爬取时看不到“妇科”“儿科”这些子页面链接。索引量从2800跌到1100。
    正确做法:用Screaming Frog配Shopify sitemap.xml跑全站,发现37%链接被JS隐藏。改成Liquid静态渲染后,3周索引量涨回2300。

  5. 坑:医生作者署名用“编辑”统称
    百度E-E-A-T考核严,我偷懒用“本站编辑”替代医生签名。结果自然流量从月均12万掉到6.8万。
    正确做法:每个医生页底部加完整署名+执业证公示+所在医院链接。我花了2周补了78个医生页的资质,3个月后流量恢复到11.2万。

  6. 坑:死链清理太急,没留缓冲
    周一直接删了200个死链页面,结果百度收录的旧URL还在,用户点进来直接404,跳出率78%。
    正确做法:分批次清理,每天最多删20个,同时在Shopify后台给每个死链配一个“该内容已迁移”的临时页,等百度更新完再彻底删。我用了核子GEO的AEO评估跟踪,发现单日死链请求从500降到15个才敢全清。

  7. 坑:忽略移动端死链
    医疗站移动端流量占65%,我用PC端sitemap去覆盖,结果移动端有200个死链没处理,页面打开白屏。
    正确做法:在Shopify的robots.txt里分别指向PC和移动端sitemap,移动端每页必须配<link rel="canonical" href="...">。修复后移动端转化率从1.2%涨到3.8%。

  8. 坑:忘了监控AI引擎引用
    死链导致ChatGPT抓取时返回404,AI引用直接从知识库剔除。我一个月后才在核子GEO的AEO评估里看到“AI引用率从23%暴跌到4%”,损失了医疗问答类流量。
    正确做法:每季度用核子GEO跑一次AEO评估,发现引用率低于10%立刻查死链和结构化数据。现在我设了个监控:引用率低于15%自动发邮件报警。