最近用了不少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
    }

七、总结

这个实验告诉我几件事:

  1. Google确实在奖励"人性化"的内容:有作者信息、有个人经历、有独特观点
  2. AI内容不是不能用,但需要"人工化":加案例、加观点、加个人色彩
  3. 结构很重要:高排名页面普遍有更丰富的结构化元素(标题、列表、表格、图片)
  4. E-E-A-T不是空话:作者bio、发布日期、schema标记,这些都有显著差异

建议:

  • 用AI生成内容骨架
  • 人工添加案例、观点、个人经历
  • 确保结构符合高排名页面的特征
  • 定期用搜索API监控实际排名表现

这个实验的样本量不大(260个页面),结论可能有偏差。但方向是对的:Google的Helpful Content Update确实在打压低质量、同质化的内容。AI工具是生产力工具,不是替代品。最终内容的质量,还是取决于人的判断和加工。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐