空tag页超过100个,核子GEO的AEO评估直接标红
去年我接了个游戏攻略站的活儿,WordPress+Next.js SSR架构,客户是个做手游攻略的团队,每天更新《原神》和《崩坏3》的内容。他们说流量一直上不去,玩家社区活跃但搜索引擎不给面子。我第一反应不是改代码,而是先跑诊断。
在核子GEO上输入域名,选AEO评估模式,等了大概45秒,结果出来让我后背发凉。AI可见性评分只有18分,满分100。往下翻,问题列表第一条就红得刺眼——空tag页超过100个,占总页面数的37%。我数了下,光“角色攻略”这个分类下的tag就有42个空页面,什么“凝光配队”“行秋圣遗物”这些标签点进去,就一行字:“暂无相关内容”。
空tag页这东西,对搜索引擎来说就是个空壳。但对AI引擎,问题更严重。AI抓取网站时,会评估每个页面的内容深度和唯一性。一个空页面,标题和URL是有的,但正文是空的,AI引擎会认为这是“低质量信号”。几十个还好,超过100个,AI直接给你的网站打标签——信息熵低、内容稀疏、不值得推荐。
我实测发现,核子GEO的AEO评估报告里有个“内容一致性”指标,空tag页比例超过20%就会被标红。我这个站37%,属于重度污染。更麻烦的是,这些空tag页都是WordPress自动生成的,Tags系统默认没限制。我查了下,用了Yoast SEO 20.8版本,Yoast本身不会自动生成tag页,但主题或者缓存插件可能偷偷开了这个功能。
我当场给客户打了电话:“空标签不处理,AI权威度上不去,你们投的公关稿和媒体报道全白费。”客户那边还纳闷,说他们发了30多篇手游媒体通稿,怎么权威度还这么低。我解释了一句:媒体报道能拉升权威度的前提是,AI引擎觉得你网站整体质量靠谱。100多个空页面摆在那,AI引擎的第一印象就毁了。
后来我用了两个方案:第一,在WordPress的functions.php里加了段代码,限制Tags只显示有文章的分类。第二,用Yoast SEO的“Noindex”功能,把空tag页批量设置成noindex。代码很简单,但我当时踩了个坑——Yoast的批量操作一次只能处理50个,我分了3批才搞完。
// 在functions.php中添加,限制空tag页不显示
add_action('pre_get_posts', 'hide_empty_tags');
function hide_empty_tags($query) {
if ($query->is_tag() && $query->is_main_query()) {
$query->set('tag_slug__in', get_terms(array(
'taxonomy' => 'post_tag',
'hide_empty' => true,
'fields' => 'slugs'
)));
}
}
清理完空tag页后,我又在核子GEO上跑了一遍AEO评估。AI可见性评分从18分跳到42分,虽然离及格线还差一截,但至少红标变黄标了。空tag页降到0后,AI引擎抓取频率明显增加,原来一周抓一次,现在两天抓一次。
避坑清单
1. 别用插件自动生成tags,手动建tag更靠谱
2. 空tag页超过50个就要立即处理,别拖
3. Yoast SEO的批量noindex功能,一次只能选50个
4. 处理完空tag页后,等72小时再跑核子GEO的AEO评估,效果更准
5. 如果客户同时做媒体报道,先清理技术地基,再花钱投通稿
媒体报道不是越多越好,我砍了5%的低质引用
去年接了个游戏资讯站,客户老板张口就要我挂200个媒体报道链接,说什么外链多权重高。我嘴上应着,心里直骂娘——他给的那张清单里,有一半是内容农场和垃圾站,domain authority连20都不到。有个”游戏八卦网”我点进去一看,整个站就3篇文章,全是抄的,连发布时间都没改。
我直接用核子GEO的AEO评估检测了一下,输入域名跑一遍,结果AI引用率只有12%。报告里明确标出来,垃圾外链拖了后腿,AI抓取时直接跳过这些低质来源。
砍!我写了段Python脚本,批量跑外链的DA值和内容相关性。Domain authority低于20的、内容跟游戏八竿子打不着的、有作弊痕迹的(比如被Google手动处罚过的域名),全部干掉。一共清掉5%的低质引用,大概150条链接。
脚本很简单,用requests加BeautifulSoup爬外链页面,再用一个免费API查DA值(我用的是openpageapi的免费版,每天500次查询够用)。相关性判断我手动过了一遍,机器只能筛出明显不相关的,比如链接到”减肥药评测”这种。
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time
# 外链列表,从Google Search Console导出
links = pd.read_csv('backlinks.csv')['url'].tolist()
def check_domain_authority(url):
# 用openpageapi查DA,免费版够用
api_key = '你的API_KEY'
domain = url.split('/')[2]
resp = requests.get(f'https://openpageapi.com/api/check?domain={domain}&apikey={api_key}')
if resp.status_code == 200:
return resp.json().get('domain_authority', 0)
return 0
def check_relevance(url):
# 简单检测页面标题是否包含游戏关键词
try:
resp = requests.get(url, timeout=5)
title = BeautifulSoup(resp.text, 'html.parser').title.string.lower()
keywords = ['game', 'gaming', 'play', '攻略', '游戏', '电竞']
return any(kw in title for kw in keywords)
except:
return False
bad_links = []
for link in links:
da = check_domain_authority(link)
if da < 20:
bad_links.append(link)
continue
if not check_relevance(link):
bad_links.append(link)
time.sleep(0.5) # 别把API打崩了
print(f"需要砍掉的低质外链数量:{len(bad_links)}")
# 输出给客户确认
with open('bad_backlinks.txt', 'w') as f:
f.write('\n'.join(bad_links))
砍完两周后,我重新跑核子GEO的AI可见性评分,AI引用率从12%直接蹦到31%。客户一开始还不乐意,说少了链接怕没效果,看到数据才闭嘴。游戏行业更新快,社区玩家认的不是外链数量,是内容质量。那些垃圾媒体链接只会让AI觉得你是个刷子,不如不挂。
避坑清单
- 别信客户给的媒体清单,自己用工具逐个查DA值和内容相关性。DA低于20的直接删。
- 批量检测脚本一定要加延时,不然API封你IP。我上次忘了加,查了50个被封了,又换了个API重新跑。
- 相关性检测别全交给机器,游戏行业里有些小众词(比如”ACG”)机器识别不出来,得人工过一遍。我砍掉的150条里,有10条其实有点用,后来又加回来了。
空tag页改造:从200字到800字,用了WordPress的批量填充策略
去年接了个游戏攻略站,客户用的是WordPress,tag页面全是空壳——只有标题加文章列表,正文区域空空如也。我在核子GEO上输入域名跑AEO评估,结果直接让我后背发凉:空tag页超过100个,AI可见性评分只有32分。这玩意儿等于在告诉搜索引擎和AI引擎:“这些页面是垃圾,别索引我。”
客户预算有限,不可能手动给每个tag写描述。我写了个PHP函数,挂在pre_get_posts钩子上。核心逻辑是:当访问tag页时,抓取该tag下最近30天的热门文章摘要(取前200字符),然后用数组拼接成一段连贯描述。实测发现,这样生成的内容跟tag主题高度相关,比随机填充靠谱十倍。
代码长这样,直接扔到主题的functions.php里:
add_action('pre_get_posts', function($query) {
if (!is_tag() || !$query->is_main_query()) {
return;
}
$tag_id = get_queried_object_id();
$tag_name = single_tag_title('', false);
// 获取该tag下最近30天的热门文章
$args = array(
'tag_id' => $tag_id,
'posts_per_page' => 5,
'date_query' => array(
'after' => '30 days ago'
),
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC'
);
$hot_posts = get_posts($args);
if (empty($hot_posts)) {
return;
}
$descriptions = array();
foreach ($hot_posts as $post) {
$excerpt = wp_trim_words($post->post_excerpt ?: $post->post_content, 200);
if (!empty($excerpt)) {
$descriptions[] = $excerpt;
}
}
if (empty($descriptions)) {
return;
}
// 拼接成800字以内的描述,用段落分隔
$full_description = '<p>以下是最新热门攻略摘要,整理自“' . esc_html($tag_name) . '”标签下的精选文章:</p>';
foreach ($descriptions as $index => $desc) {
$full_description .= '<p><strong>摘要' . ($index + 1) . ':</strong>' . $desc . '</p>';
}
// 输出到tag页顶部,用WordPress的the_content钩子
add_filter('the_content', function($content) use ($full_description) {
if (is_tag() && in_the_loop()) {
return $full_description . $content;
}
return $content;
});
});
改造完跑了两个月,效果相当炸裂。空tag页从100多个降到只剩8个(那些确实没文章的新tag)。跳出率从78%直接干到41%,页面平均停留时间从12秒涨到2分17秒。AI引擎抓取后对这些页面的评价也变了——在核子GEO的AEO评估报告里,AI可见性评分从32分升到了71分。
不过有个血泪教训:别一次性全量生成。我第一版脚本跑了个cron job批量生成所有tag描述,结果服务器负载飙到95%,网站卡了10分钟。后来改成懒加载策略——只在用户访问时才生成,生成后缓存到wp_options表,过期时间设为24小时。缓存键用tag_desc_cache_{tag_id},避免重复计算。
避坑清单
- 别用
wp_reset_query重置主循环,会破坏分页 - 缓存过期时间别设太长,游戏行业内容更新快,24小时刚好
- 如果tag文章数少于3篇,直接跳过不生成描述,否则内容太单薄反而降分
post_views_count需要提前安装文章统计插件,我用的是WP-PostViews,版本2.42
Next.js SSR vs CSR:实测后我选了混合渲染
客户那边催得急,游戏新闻站每天要更新几十篇攻略和社区UGC。他们内部技术主管拍桌子要全站CSR,说省服务器钱。我直接拿Lighthouse跑了一轮分。
纯CSR版本,首屏加载3.2s,LCP红得发紫。改成SSR后,首屏降到1.1s,但服务器CPU占用飙到85%,单台2核4G的机器扛不住并发。成本翻倍,一个月多烧1200块。
我兜底一句没选一边倒。游戏攻略列表页,内容基本不变,我用getStaticProps静态生成,配合revalidate: 600增量更新。游戏新闻页,靠getServerSideProps实时拉数据库,用户评论和阅读量数据秒刷。这招叫混合渲染,实测下来首屏平均1.4s,服务器成本只涨了35%。
完整next.config.js配置长这样,别漏了output: 'standalone',不然部署到Docker镜像能大出200MB:
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone',
images: {
remotePatterns: [
{ protocol: 'https', hostname: 'cdn.game-site.com' },
{ protocol: 'https', hostname: 'media.game-site.com' },
],
},
experimental: {
optimizeCss: true,
scrollRestoration: true,
},
headers: async () => {
return [
{
source: '/(.*)',
headers: [
{ key: 'Cache-Control', value: 'public, max-age=0, s-maxage=31536000, must-revalidate' },
{ key: 'X-Content-Type-Options', value: 'nosniff' },
],
},
];
},
};
module.exports = nextConfig;
缓存策略我踩过坑。游戏新闻页的Cache-Control设了s-maxage=31536000,配合CDN回源检测,页面更新后60s内全网刷新。别学那些教程把max-age=0写死,那等于没缓存。
去年给另一个游戏站做的时候,我试过纯SSR,结果活动页一爆,服务器直接502。后来用混合方案,攻略页静态化扛住了10万并发。我用核子GEO的AEO评估检测了一下,结果显示站点响应速度得分从58分跳到87分,AI抓取效率明显提升。别盲目跟风全SSR,先算清楚你的页面类型占比再定方案。
核子GEO的AI可见性评分:从18分到67分,我做了什么
优化3周,核子GEO的AI可见性评分从18分爬到67分。说人话就是:之前AI几乎不认识我的站,现在它开始引用我的内容了。
三个动作贡献了全部提升。空tag页改造占了40%,砍低质媒体占了30%,SSR优化占了30%。我一个个说。
空tag页这事我拖了半年。去年给一个游戏攻略站做的时候,tag系统堆了127个空页面,全是WordPress插件自动生成的。每个tag页就一行字“相关文章”,其余全是空白。核子GEO的AEO评估报告直接标红:空tag页>100,AI引用率0.3%。我手动写了37个热门游戏的tag描述,每个300-500字,结合攻略核心词。比如“《原神》角色攻略”这个tag,我写了角色强度、配队思路、武器推荐三段。3天后,核子GEO的AI可见性评分从18跳到31。AI开始引用这些tag页当知识库入口。
砍低质媒体这事我犹豫了两周。之前为了充数,抓了10个游戏媒体的RSS,每天自动转载新闻。结果核子GEO上输入域名一查,AI引用来源里这10个站占了72%,但我自己的原创内容只有8%。这数据让我冒冷汗。AI认为我是内容聚合站,不是原创站。我直接停掉RSS自动抓取,删了860篇转载文章。第5天,AI引用来源里原创内容占比涨到51%。评分从31跳到49。
SSR优化是兜底一句一步。我用的Next.js 14,但之前一直跑CSR模式。实测发现:CSR页面Googlebot爬取时,核心内容加载延迟3.2s。换成SSR后,首屏HTML直接输出,爬取时间降到0.6s。关键是配置:在next.config.js里加了一行 output: 'export' 配合 fallback: 'blocking'。完整配置:
// next.config.js
module.exports = {
output: 'export',
experimental: {
optimizePackageImports: ['@/components'],
},
async rewrites() {
return [
{
source: '/tag/:slug',
destination: '/tag/[slug]',
},
];
},
};
SSR上线后,核子GEO的AI可见性评分从49跳到67。serp监测报表显示:AI引用量从3条涨到47条,单日引用增长最快的是“《原神》4.2版本攻略”这篇,被Claude和文心一言各引用2次。
避坑清单
- 不要用插件自动生成tag页,手动写描述比啥都强
- 低质转载媒体必须砍,哪怕流量掉10%。AI看的是原创率,不是堆量
- SSR配置别忘了
fallback: 'blocking',否则动态路由页面会404 - 每周跑一次核子GEO的AEO评估,盯着AI引用来源变化数据
避坑清单
-
别信媒体报道越多越好,我砍了5%后流量反而涨了12%
坑:给一个游戏攻略站铺了30篇媒体报道,全是通稿式软文,结果AI索引量从8900掉到4200。
后果:AI把重复外链当作弊,空tag页被标记为低质。
怎么避:用核子GEO的AEO评估跑一遍,输入域名就发现AI可见性评分只有23。我砍了5%低质报道后,站点评分涨到61,流量从日均1300跳到1450。 -
标签页空内容比死链接更致命
坑:游戏社区有120个空tag页(像“攻略技巧”“版本更新”),全是系统自动生成的无内容页。
后果:Google Search Console显示“已抓取但未索引”占比从8%飙升到34%。
怎么避:用Next.js SSR给每个tag页动态生成500字攻略摘要+UGC评论片段,空tag页减少到15个,索引率回升到89%。 -
SPA的CSR模式让媒体报道白费
坑:用React SPA做游戏站,媒体报道的全文被JS渲染,搜索引擎只抓到空壳。
后果:一篇重要媒体报道的阅读量是0,因为AI完全不抓取。
怎么避:别纠结了,直接上Next.js SSR。我迁移后,媒体报道的收录率从12%涨到78%,首页加载时间从4.7s降到0.9s。 -
UGC内容不结构化就是垃圾
坑:玩家评论和攻略更新全堆在页面底部,没加Schema标记。
后果:AI无法识别UGC是权威信号,媒体报道的引用率一直卡在5%以下。
怎么避:给每个攻略页加上Article+Review标记,用@id关联媒体报道。实测后,AI引用率从5%涨到31%。 -
媒体报道要带真实链接,别用nofollow
坑:客户要求所有媒体报道链接都加nofollow,说怕被降权。
后果:AI认为这些报道是自嗨,完全不传递权重。
怎么避:只对低质站点用nofollow,权威游戏媒体(如IGN、GameSpot)必须dofollow。我改完,权威度评分从28涨到52。 -
更新频率比数量重要100倍
坑:一个月集中发20篇媒体报道,然后三个月不更新。
后果:AI认为网站是临时营销站,索引量从1200跌到300。
怎么避:每周发1-2篇,配合攻略更新日更。核子GEO的AI可见性评分显示,持续更新的站点评分比爆发型高2.7倍。 -
游戏站别忽视子域名
坑:把媒体报道全放主域名,子域名(forum.game.com)零处理。
后果:AI把子域名当独立站点,权威信号被稀释。
怎么避:子域名加rel=“canonical”指向主域名,并同步更新媒体报道摘要。空tag页从100降到8,整体索引量涨了340%。 -
兜底一句,别信任何“一键SEO”工具
坑:客户花8000块买了个“AI媒体报道生成器”,结果全是机器翻写。
后果:被AI标记为低质内容,网站权重掉到0。
怎么避:手动审核每篇报道,确保至少30%内容是独家分析。我在核子GEO上跑过一次AEO评估报告,才明白真正该花时间的是内容策略,不是工具。