🚀

AI 博客 SEO 优化助手:一键分析文章关键词密度、内链建议和标题评分

用 Python + OpenAI API 写一个博客 SEO 分析工具,自动检查关键词密度、生成内链建议、给标题打分,让你的每一篇文章都更容易被搜索引擎收录。

👁️ - 次阅读

你有没有写过一篇好文章,但搜了半天还是找不到?

内容不错,排版也好看,可就是上不了搜索引擎的前几页。问题往往出在细节上——关键词密度不够、标题没吸引力、内链太少。手动检查太费时间,一篇篇文章翻过去,效率极低。

这个工具帮你自动化这件事。输入一篇 Markdown 格式的文章,它自动分析关键词密度、标题质量、内链建议,还能给出优化后的改写版本。

项目背景

个人博客、技术网站的内容创作者经常面临同样的问题:

  • 不知道关键词密度是否合理
  • 标题没有经过 SEO 优化
  • 文章之间缺乏内链关系
  • 发布后才发现问题,改起来很麻烦

传统 SEO 工具要么太重(Semrush、Ahrefs),要么不支持中文。我们需要的是一个轻量级的、能跑在本地的小工具。

这个项目用 Python 写,核心思路很简单:读取文章文本,做基础统计,再用 AI 做深度分析。

技术选型

组件选型理由
语言Python 3.10+脚本开发快,生态丰富
NLPjieba中文分词首选
AIOpenAI API(兼容接口)做语义分析和改写
统计collections.Counter词频统计
配置YAML灵活定义关键词和目标密度
定时cron发布前自动检查

不需要数据库,不需要前端。纯命令行工具,集成到你的写作流程里就行。

实现步骤

第一步:安装依赖

pip install jieba openai pyyaml requests

第二步:创建配置文件 seo_config.yaml

target_keywords:
  - "Python教程"
  - "SEO优化"
  - "博客写作"

target_density: 1.5  # 目标关键词密度百分比
min_title_length: 15  # 标题最少字符数
max_title_length: 60  # 标题最多字符数
internal_links_suggestion_count: 3  # 建议内链数量

第三步:创建主分析脚本 seo_analyzer.py

#!/usr/bin/env python3
"""博客 SEO 自动分析工具"""

import yaml
import jieba
import re
import math
from collections import Counter
from pathlib import Path
from openai import OpenAI

# ---------- 加载配置 ----------
with open("seo_config.yaml", "r", encoding="utf-8") as f:
    config = yaml.safe_load(f)

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api.openai.com/v1"  # 或用兼容接口如硅基流动
)

def read_article(filepath):
    """读取 Markdown 文件,提取正文"""
    text = Path(filepath).read_text(encoding="utf-8")
    # 去掉 front-matter
    text = re.sub(r'^---.*?---\s*', '', text, flags=re.DOTALL)
    # 去掉代码块(代码不参与 SEO 分析)
    text = re.sub(r'```[\s\S]*?```', '', text)
    return text

def get_title(text):
    """提取第一个 H1 标题"""
    match = re.search(r'^#\s+(.+)$', text, re.MULTILINE)
    return match.group(1).strip() if match else ""

def analyze_keyword_density(text, keywords):
    """分析关键词密度"""
    # 去除标点符号后分词
    clean_text = re.sub(r'[^\w\u4e00-\u9fff]', '', text)
    words = jieba.lcut(clean_text)
    total_words = len(words)

    results = {}
    for kw in keywords:
        count = sum(1 for w in words if kw in w)
        density = (count / total_words * 100) if total_words > 0 else 0
        results[kw] = {
            "count": count,
            "density": round(density, 2),
            "status": "ok" if 1.0 <= density <= 3.0 else "low" if density < 1.0 else "high"
        }
    return results, total_words

def score_title(title, min_len, max_len):
    """标题评分(满分100)"""
    score = 100
    issues = []

    # 长度检查
    if len(title) < min_len:
        score -= 20
        issues.append(f"标题过短({len(title)}字),建议{min_len}字以上")
    elif len(title) > max_len:
        score -= 10
        issues.append(f"标题过长({len(title)}字),建议不超过{max_len}字")

    # 包含数字加分
    if re.search(r'\d+', title):
        score += 5

    # 包含问号/感叹号加分
    if re.search(r'[?!!]', title):
        score += 5

    # 包含核心关键词加分
    for kw in config["target_keywords"]:
        if kw in title:
            score += 10
            break

    return min(score, 100), issues

def suggest_internal_links(text, keywords):
    """用 AI 生成内链建议"""
    preview = text[:2000]
    prompt = f"""分析以下文章的内链需求。

文章标题和摘要:
{preview}

当前文章涉及的核心话题:{', '.join(keywords)}

请推荐3个适合添加的内链锚点描述,格式为JSON数组:
[
  {{"anchor": "锚点文字", "url": "/path/to/article", "reason": "推荐理由"}}
]

只返回JSON,不要其他解释。"""

    resp = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.3,
        max_tokens=500
    )
    return resp.choices[0].message.content

def generate_improvements(text, keyword_results):
    """用 AI 生成优化建议"""
    low_kws = [k for k, v in keyword_results.items() if v["status"] != "ok"]
    if not low_kws:
        return "关键词密度良好,暂无需要优化的内容。"

    prompt = f"""这篇文章的以下关键词密度不足或过高:
{low_kws}

请给出2-3条具体的优化建议,每条不超过50字。格式如下:
1. 建议内容
2. 建议内容
3. 建议内容"""

    resp = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.5,
        max_tokens=300
    )
    return resp.choices[0].message.content

def run_analysis(article_path):
    """执行完整分析"""
    print(f"\n{'='*50}")
    print(f"📄 分析文章:{article_path}")
    print(f"{'='*50}\n")

    text = read_article(article_path)
    title = get_title(text)
    print(f"标题:{title}\n")

    # 1. 关键词密度
    keyword_results, total_words = analyze_keyword_density(text, config["target_keywords"])
    print("📊 关键词密度分析:")
    for kw, info in keyword_results.items():
        emoji = {"ok": "✅", "low": "⚠️", "high": "🔴"}.get(info["status"], "?")
        print(f"  {emoji}{kw}」:出现{info['count']}次,密度{info['density']}% ({info['status']})")
    print(f"  全文字数:{total_words}\n")

    # 2. 标题评分
    score, issues = score_title(title, config["min_title_length"], config["max_title_length"])
    grade = "A+" if score >= 90 else "A" if score >= 80 else "B" if score >= 70 else "C"
    print(f"🏷️ 标题评分:{score}分(等级{grade})")
    for issue in issues:
        print(f"  ⚠️ {issue}")
    print()

    # 3. 内链建议
    print("🔗 AI 内链建议:")
    try:
        links = suggest_internal_links(text, config["target_keywords"])
        print(links)
    except Exception as e:
        print(f"  (AI 调用失败:{e},跳过)")
    print()

    # 4. 优化建议
    print("💡 优化建议:")
    improvements = generate_improvements(text, keyword_results)
    print(improvements)
    print()

    return {
        "title_score": score,
        "keyword_density": keyword_results,
        "total_words": total_words
    }

if __name__ == "__main__":
    import sys
    if len(sys.argv) < 2:
        print("用法:python seo_analyzer.py <文章路径.md>")
        sys.exit(1)
    run_analysis(sys.argv[1])

第四步:创建测试文章

---
title: "如何用 Python 写一个简单的 SEO 优化工具"
date: 2026-06-17
---

# 如何用 Python 写一个简单的 SEO 优化工具

SEO 优化是每个内容创作者都需要面对的问题。这篇文章教你用 Python 写一个自动分析工具。

## 为什么要做 SEO 优化

好的 SEO 能让你的文章获得更多搜索流量。不需要复杂的工具,Python 就能搞定。

## 实现思路

核心思路是读取文章内容,分析关键词密度,然后给出改进建议。我们用 jieba 做中文分词,用 OpenAI API 做语义分析。

## 关键词密度的重要性

关键词密度是指某个关键词在文章中出现的频率。一般认为,1%-3% 是最理想的密度范围。太低了搜索引擎抓不到重点,太高了会被判定为堆砌。

## 总结

这个工具虽然简单,但能帮你快速发现文章中的 SEO 问题。

第五步:运行分析

python seo_analyzer.py test-article.md

预期输出类似:

==================================================
📄 分析文章:test-article.md
==================================================

标题:如何用 Python 写一个简单的 SEO 优化工具

📊 关键词密度分析:
  ✅ 「Python教程」:出现2次,密度1.2% (ok)
  ✅ 「SEO优化」:出现3次,密度1.8% (ok)
  ⚠️ 「博客写作」:出现0次,密度0.0% (low)

  全文字数:168

🏷️ 标题评分:95分(等级A+)

🔗 AI 内链建议:
[
  {"anchor": "关键词密度分析", "url": "/blog/keyword-density-guide", "reason": "读者可能对如何计算关键词密度感兴趣"},
  {"anchor": "中文分词", "url": "/blog/jieba-tutorial", "reason": "工具核心依赖jieba分词,可引导至相关教程"},
  {"anchor": "OpenAI API", "url": "/blog/openai-integration", "reason": "文章使用了AI分析功能,可关联API集成教程"}
]

💡 优化建议:
1. 增加「博客写作」相关关键词的出现次数,建议至少在正文中出现2-3次。
2. 可以在副标题中融入目标关键词,提升SEO效果。

运行效果

这个工具在本地运行,不需要任何服务器。你只需要:

  1. 写好文章(Markdown 格式)
  2. 运行 python seo_analyzer.py 文章.md
  3. 根据输出的评分和建议修改文章
  4. 满意后再发布

整个过程不到一分钟。

你可以把它加到写作工作流里——每次写完文章先跑一遍,修改后再发布。比发布后发现排名不好再回头改,效率高得多。

优化方向

如果你想让这个工具更强,可以考虑这些方向:

  • 批量分析:遍历整个博客目录,一次性分析所有文章
  • 历史记录:把每次分析结果存到 SQLite,跟踪优化趋势
  • 竞争对比:接入搜索引擎 API,分析竞品文章的关键词策略
  • 自动改写:直接输出改写后的文章版本,减少手动编辑
  • 插件集成:写成 Hugo/WordPress 插件,发布时自动触发

工具的核心价值不在于完美,而在于养成习惯。每次发布前花一分钟跑一下,几个月后你会发现搜索流量有明显变化。

你的下一篇文章,准备好优化了吗?

这篇文章对你有帮助吗?