AI内容检测:用SERP对比识别搜索引擎眼中的“优质内容“
·
最近用了不少AI写作工具,但生成的内容在Google上排名一般。我怀疑是Google能识别AI内容。于是设计了一个实验:用SerpBase采集高排名和低排名页面,对比它们的特征差异,找出"搜索引擎认可的优质内容"长什么样。
一、AI内容的排名困境
很多人发现:用ChatGPT写的文章,读起来不错,但排不上去。
可能的原因:
- 内容同质化:AI生成的内容和已有内容太像
- 缺乏E-E-A-T:没有真实的经验、专业度、权威性
- 信息密度低:废话多,实质内容少
- 没有独特视角:AI倾向于给出"平均化"的答案
但问题是:Google到底怎么判断内容质量?官方说法是"helpful content update",但具体信号是什么?
二、实验设计
2.1 样本选择
我选了50个竞争度中等的关键词,每个词采集两类页面:
- 高排名组:排名前3的页面
- 低排名组:排名第8-10的页面
样本量:50词 × 6页 = 300个页面
2.2 采集页面特征
import requests
from bs4 import BeautifulSoup
from typing import Dict, List
API_KEY = "YOUR_KEY"
BASE_URL = "https://api.serpbase.dev/google/search"
def collect_page_features(keyword: str, api_key: str) -> Dict:
"""采集某关键词下不同排名页面的特征"""
headers = {
"X-API-Key": api_key,
"Content-Type": "application/json"
}
body = {
"q": keyword,
"hl": "en",
"gl": "us",
"page": 1
}
r = requests.post(BASE_URL, headers=headers, json=body, timeout=30)
data = r.json()
results = {"high_rank": [], "low_rank": []}
for item in data.get("organic", []):
rank = item["rank"]
url = item.get("link", "")
if rank <= 3 or (8 <= rank <= 10):
# 抓取页面内容
try:
page_data = fetch_page_content(url)
features = extract_content_features(page_data, rank)
if rank <= 3:
results["high_rank"].append(features)
else:
results["low_rank"].append(features)
except Exception as e:
print(f"Error fetching {url}: {e}")
return results
def fetch_page_content(url: str) -> str:
"""抓取页面HTML"""
r = requests.get(url, timeout=15, headers={
"User-Agent": "Mozilla/5.0 (ResearchBot/1.0)"
})
return r.text
def extract_content_features(html: str, rank: int) -> Dict:
"""提取内容特征"""
soup = BeautifulSoup(html, 'html.parser')
# 移除script和style
for script in soup(["script", "style", "nav", "footer", "header"]):
script.decompose()
text = soup.get_text()
paragraphs = [p.get_text().strip() for p in soup.find_all('p') if len(p.get_text().strip()) > 20]
return {
"rank": rank,
"word_count": len(text.split()),
"paragraph_count": len(paragraphs),
"avg_paragraph_length": sum(len(p.split()) for p in paragraphs) / len(paragraphs) if paragraphs else 0,
"heading_count": len(soup.find_all(['h1', 'h2', 'h3'])),
"image_count": len(soup.find_all('img')),
"list_count": len(soup.find_all(['ul', 'ol'])),
"table_count": len(soup.find_all('table')),
"external_links": len([a for a in soup.find_all('a', href=True) if a['href'].startswith('http')]),
"has_author_bio": 1 if soup.find(class_=re.compile(r'author|bio', re.I)) else 0,
"has_date": 1 if soup.find(['time', 'span'], class_=re.compile(r'date|published', re.I)) else 0,
"has_schema": 1 if soup.find('script', type='application/ld+json') else 0,
"text_to_html_ratio": len(text) / len(html) if len(html) > 0 else 0
}
2.3 特征对比分析
import pandas as pd
from scipy import stats
def compare_groups(high_rank: List[Dict], low_rank: List[Dict]):
"""对比高排名和低排名页面的特征差异"""
df_high = pd.DataFrame(high_rank)
df_low = pd.DataFrame(low_rank)
features_to_test = [
"word_count", "paragraph_count", "avg_paragraph_length",
"heading_count", "image_count", "list_count", "table_count",
"external_links", "has_author_bio", "has_date", "has_schema",
"text_to_html_ratio"
]
results = []
for feature in features_to_test:
high_values = df_high[feature].dropna()
low_values = df_low[feature].dropna()
# t检验
t_stat, p_value = stats.ttest_ind(high_values, low_values)
results.append({
"feature": feature,
"high_rank_mean": high_values.mean(),
"low_rank_mean": low_values.mean(),
"difference": high_values.mean() - low_values.mean(),
"p_value": p_value,
"significant": p_value < 0.05
})
return pd.DataFrame(results).sort_values("p_value")
三、实验结果
我跑了50个关键词,分析了约260个有效页面(有些页面抓取失败)。
3.1 显著差异的特征
| 特征 | 高排名均值 | 低排名均值 | 差异 | 显著性 |
|---|---|---|---|---|
| word_count | 2,340 | 1,180 | +98% | *** |
| heading_count | 12.4 | 6.2 | +100% | *** |
| image_count | 8.5 | 3.1 | +174% | *** |
| list_count | 4.2 | 1.8 | +133% | ** |
| table_count | 1.8 | 0.4 | +350% | ** |
| has_author_bio | 68% | 22% | +46pp | *** |
| has_date | 82% | 45% | +37pp | *** |
| has_schema | 74% | 38% | +36pp | ** |
| external_links | 15.2 | 8.4 | +81% | ** |
| text_to_html_ratio | 0.18 | 0.12 | +50% | * |
3.2 不显著的特征
| 特征 | 结论 |
|---|---|
| avg_paragraph_length | 高排名和低排名差异不大(都是80-100词/段) |
| 纯文本密度 | 差异存在但不显著 |
四、AI内容 vs 人工内容的SERP表现
我专门对比了两类内容:
4.1 识别方法
通过页面特征间接判断内容来源:
- AI内容信号:完美但平淡的语言、没有个人经历、缺乏具体案例
- 人工内容信号:有口语化表达、包含个人故事、有独特观点
def estimate_content_source(html: str) -> Dict:
"""估算内容来源(简化版)"""
text = BeautifulSoup(html, 'html.parser').get_text()
signals = {
"first_person": len(re.findall(r'\b(I|we|my|our)\b', text, re.I)),
"personal_stories": len(re.findall(r'\b(when I|in my experience|I remember)\b', text, re.I)),
"specific_dates": len(re.findall(r'\b(January|February|March|April|May|June|July|August|September|October|November|December)\b', text)),
"opinion_words": len(re.findall(r'\b(I think|I believe|in my opinion)\b', text, re.I)),
"generic_phrases": len(re.findall(r'\b(it is important to|it should be noted that|as we all know)\b', text, re.I))
}
# 简单评分
human_score = signals["first_person"] + signals["personal_stories"] * 3 + signals["opinion_words"] * 2
ai_score = signals["generic_phrases"] * 2
return {
"human_score": human_score,
"ai_score": ai_score,
"likely_source": "human" if human_score > ai_score * 2 else "ai" if ai_score > human_score else "mixed"
}
4.2 AI内容的排名劣势
在260个样本中,我分类出:
- 明显AI内容:89个
- 明显人工内容:102个
- 混合/不确定:69个
| 内容类型 | 平均排名 | Top3比例 |
|---|---|---|
| 人工内容 | 4.2 | 38% |
| AI内容 | 6.8 | 18% |
| 混合 | 5.5 | 25% |
人工内容的Top3率是AI内容的两倍。
五、优化建议:让AI内容更像"优质内容"
基于实验数据,给AI生成内容的优化清单:
5.1 结构优化
def optimize_ai_content_structure(content: str) -> str:
"""优化AI内容的结构,使其更像高排名页面"""
# 1. 确保有足够的标题(每300-400字一个H2/H3)
words = len(content.split())
expected_headings = max(5, words // 350)
# 2. 添加列表(每800字至少一个列表)
expected_lists = max(2, words // 800)
# 3. 建议添加表格(如果内容适合)
return {
"current_word_count": words,
"recommended_headings": expected_headings,
"recommended_lists": expected_lists,
"suggested_additions": [
"Add author bio section",
"Include publication date",
"Add comparison table",
"Include real case studies"
]
}
5.2 内容质量优化
基于实验结果的AI写作prompt优化:
你是一个有10年经验的行业专家。请写一篇关于[主题]的深度文章。
要求:
1. 包含至少一个你亲自经历过的案例或故事
2. 使用第一人称"我"或"我们"表达观点
3. 包含具体的日期、数字和数据
4. 加入你自己的独特见解,不要只是总结常识
5. 引用至少3个外部权威来源
6. 使用列表和表格组织信息
7. 在文章底部加入作者介绍,说明你的专业背景
8. 语言可以有一些个人风格,不要太完美和机械化
9. 字数2000字以上
六、持续监控
def monitor_content_performance(url: str, target_keywords: List[str], api_key: str):
"""监控某页面的排名表现"""
rankings = {}
for kw in target_keywords:
headers = {
"X-API-Key": api_key,
"Content-Type": "application/json"
}
body = {
"q": kw,
"hl": "en",
"gl": "us",
"page": 1
}
r = requests.post(BASE_URL, headers=headers, json=body, timeout=30)
data = r.json()
for item in data.get("organic", []):
if url in item.get("link", ""):
rankings[kw] = item["rank"]
break
return {
"url": url,
"avg_rank": sum(rankings.values()) / len(rankings) if rankings else None,
"top3_count": sum(1 for r in rankings.values() if r <= 3),
"rankings": rankings
}
七、总结
这个实验告诉我几件事:
- Google确实在奖励"人性化"的内容:有作者信息、有个人经历、有独特观点
- AI内容不是不能用,但需要"人工化":加案例、加观点、加个人色彩
- 结构很重要:高排名页面普遍有更丰富的结构化元素(标题、列表、表格、图片)
- E-E-A-T不是空话:作者bio、发布日期、schema标记,这些都有显著差异
建议:
- 用AI生成内容骨架
- 人工添加案例、观点、个人经历
- 确保结构符合高排名页面的特征
- 定期用搜索API监控实际排名表现
这个实验的样本量不大(260个页面),结论可能有偏差。但方向是对的:Google的Helpful Content Update确实在打压低质量、同质化的内容。AI工具是生产力工具,不是替代品。最终内容的质量,还是取决于人的判断和加工。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)