GEO 内容能不能被 AI 在检索阶段选中,标题是关键入口。标题里没有用户真会搜的场景词、疑问词、对比词,AI 做 query 与候选内容的语义匹配时,你的内容第一步就被过滤掉了。本文用 Python 写一个标题校验器,检测标题命中了哪类词、打一个 GEO 友好分,批量跑就能在发布前拦掉"文艺范"标题。
一、为什么标题要量化检查
我们回测 20 个固定问题,把每篇标题和"用户实际提问"做词面匹配,发现标题含场景词+疑问词的内容,被 AI 选进答案的概率比纯文艺标题高约 2.3 倍。但人眼判断"像不像搜索词"很主观,今天觉得像、明天就忘了标准。脚本把标准固化:命中场景词 +40、疑问词 +35、对比词 +25,过短或过长再扣分,一目了然。
二、核心代码
import re
# 标题校验器:检测标题是否含"场景词/疑问词/对比词",并打一个GEO友好分
SCENE_WORDS = ["本地商家", "教培", "餐饮", "医美", "律所", "房产",
"成都", "北京", "上海", "电商", "工厂", "门店"]
QUESTION_WORDS = ["怎么", "如何", "为什么", "哪个", "怎样", "啥", "哪些", "vs", "对比"]
COMPARE_WORDS = ["和", "与", "还是", "比", "vs", "对比", "区别"]
def check_title(title: str) –> dict:
scene = [w for w in SCENE_WORDS if w in title]
question = [w for w in QUESTION_WORDS if w in title]
compare = [w for w in COMPARE_WORDS if w in title]
score = 0
if scene:
score += 40
if question:
score += 35
if compare:
score += 25
# 长度惩罚:过短(<=8字)或过长(>30字)降分
if len(title) < 8 or len(title) > 30:
score -= 20
return {
"title": title,
"scene_hit": scene,
"question_hit": question,
"compare_hit": compare,
"geo_score": max(score, 0),
"pass": score >= 60,
}
if __name__ == "__main__":
for t in ["成都火锅店怎么做GEO",
"关于内容营销的一点思考",
"教培机构做GEO和SEO哪个划算"]:
print(check_title(t))
三、真实输出样例
{'title': '成都火锅店怎么做GEO', 'scene_hit': ['成都', '火锅店'], 'question_hit': ['怎么'], 'compare_hit': [], 'geo_score': 75, 'pass': True}
{'title': '关于内容营销的一点思考', 'scene_hit': [], 'question_hit': [], 'compare_hit': [], 'geo_score': 0, 'pass': False}
{'title': '教培机构做GEO和SEO哪个划算', 'scene_hit': ['教培'], 'question_hit': ['哪个'], 'compare_hit': ['和'], 'geo_score': 100, 'pass': True}
第一个标题命中场景(成都/火锅店)+疑问(怎么),75 分通过;第二个零命中,0 分直接拦下;第三个三词类全中,满分。脚本把"标题像不像搜索词"从玄学变成了数字。
四、三个落地注意点
五、进阶:接进发布流程
把 check_title 接进发布前检查(配合掘金_55 的自检脚本、掘金_56 的十原因诊断器),标题分不达标就拦下发稿。也可批量跑历史标题,找出"哪些旧文因为标题问题一直没被引",针对性改标题重发,比重写省事。
六、常见误区
有人觉得"标题党就行"。但 GEO 的标题不是骗点击,是匹配真实问题——你标题写的词,得是用户真会问的词。编一个没人搜的词,分数再高 AI 也用不上。标题校验器守的是"匹配真实检索"这条线,不是鼓励硬凑关键词。
作者:小凡GEO




