用 AI Agent 做 SEO:从页面诊断到源码实战
AI Agent 如何做 SEO 优化|附源码
随着大模型能力的提升,SEO(搜索引擎优化)正在从“人工经验驱动”逐渐走向“智能 Agent 辅助决策”。过去做 SEO,通常需要人工完成关键词挖掘、页面诊断、标题优化、内容扩写、内链规划、竞品分析、技术 SEO 检查等工作。这些任务虽然并不一定复杂,但非常耗时,而且需要持续迭代。
AI Agent 的价值就在于:它不只是简单回答问题,而是能够按照目标自动拆解任务、调用工具、读取数据、分析网页、生成建议,甚至自动输出优化后的标题、Meta Description、文章结构和技术修复方案。
本文将系统介绍 AI Agent 如何用于 SEO 优化,并提供一个可运行的简化版 SEO Agent 源码,帮助你快速理解它的实现思路。
一、什么是 SEO Agent?
SEO Agent 可以理解为一个面向 SEO 场景的智能助手。它具备以下能力:
-
理解 SEO 目标
例如提升某篇文章的搜索排名、优化网站收录、提升点击率、增强内容相关性等。 -
读取和分析网页内容
包括标题、正文、H 标签、Meta 信息、图片 Alt、链接结构、关键词密度等。 -
发现 SEO 问题
例如标题过长、Meta Description 缺失、H1 重复、关键词覆盖不足、内容结构混乱、内链不足等。 -
生成优化建议
可以自动给出标题优化、摘要优化、关键词布局、文章大纲、FAQ、内链建议等。 -
结合搜索意图做内容优化
AI Agent 可以根据关键词判断用户搜索意图,例如信息型、交易型、导航型、商业调研型,并给出更符合搜索需求的内容方案。
二、AI Agent 做 SEO 的核心流程
一个完整的 SEO Agent 通常可以分为以下几个步骤。
1. 输入目标关键词和页面地址
用户可以输入:
目标关键词:AI Agent SEO 优化
页面地址:https://example.com/ai-agent-seo
优化目标:提升自然搜索排名,优化标题和内容结构
Agent 接收到任务后,会先明确目标:
- 当前页面是否围绕目标关键词展开?
- 页面标题是否包含核心关键词?
- Meta Description 是否具备吸引点击的能力?
- 文章内容是否满足搜索意图?
- 是否有清晰的 H2/H3 结构?
- 是否存在可补充的长尾关键词?
- 是否有适合添加的 FAQ?
- 是否需要增加内链或外链?
2. 抓取网页内容
SEO Agent 需要读取网页 HTML,然后解析其中的关键信息。
主要包括:
、、- 正文文本
- 图片 Alt
- 内链与外链
- Canonical 标签
- Robots Meta
- 页面字数
- 链接数量
这些数据是后续判断页面 SEO 状态的基础。
3. 页面基础 SEO 诊断
基础 SEO 检查可以通过规则完成。例如:
| 检查项 | 判断标准 |
|---|---|
| Title 长度 | 建议 20~35 个中文字符左右 |
| Meta Description | 建议 70~120 个中文字符 |
| H1 数量 | 建议每页只有一个 H1 |
| H2 结构 | 是否有清晰小标题 |
| 图片 Alt | 图片是否包含描述性 Alt |
| 正文字数 | 内容是否足够完整 |
| 关键词出现位置 | 标题、首段、H2、正文是否自然出现 |
| 内链 | 是否链接到站内相关内容 |
| 外链 | 是否引用可信资料 |
| URL | 是否简短、语义清晰 |
这些规则虽然简单,但对很多网站来说已经能发现大量问题。
4. 搜索意图分析
SEO 优化不能只看关键词密度,更重要的是理解搜索意图。
例如用户搜索“AI Agent 如何做 SEO 优化”,可能希望看到:
- AI Agent 在 SEO 中的作用
- 具体工作流程
- 可落地的实现方法
- 代码示例
- 实际优化策略
- 工具调用方式
- 注意事项
如果文章只是泛泛介绍“什么是 AI Agent”,而没有讲 SEO 实践,就不符合搜索意图。即使关键词出现很多次,也未必有好的排名。
因此,SEO Agent 应该根据目标关键词判断用户想要什么,并检查当前页面是否满足需求。
5. 内容结构优化
对于文章类页面,内容结构非常重要。一个适合 SEO 的内容结构通常包括:
# 主标题
## 背景介绍
## 核心概念
## 操作步骤
## 实战案例
## 常见问题
## 总结
AI Agent 可以根据关键词自动生成更合理的大纲。例如针对“AI Agent SEO 优化”,可以生成:
# AI Agent 如何做 SEO 优化|附源码
## 什么是 SEO Agent
## AI Agent 做 SEO 的核心流程
## SEO Agent 可以优化哪些内容
## 如何设计一个 SEO Agent
## Python 源码实现
## 如何扩展为自动化 SEO 系统
## 常见问题
## 总结
这种结构不仅方便用户阅读,也有助于搜索引擎理解页面主题。
三、AI Agent 可以优化哪些 SEO 内容?
1. 标题 Title 优化
Title 是 SEO 中最重要的元素之一。优秀的标题应该满足:
- 包含核心关键词
- 简洁明确
- 有吸引力
- 避免关键词堆砌
- 与页面内容高度一致
例如原始标题:
AI Agent
优化后:
AI Agent 如何做 SEO 优化?流程、策略与源码实战
这个标题明显更具体,也覆盖了“AI Agent”“SEO 优化”“源码”“实战”等搜索需求。
2. Meta Description 优化
Meta Description 虽然不直接决定排名,但会影响搜索结果点击率。点击率提升后,间接可能影响页面表现。
示例:
本文详细介绍 AI Agent 如何用于 SEO 优化,包括关键词分析、网页诊断、标题优化、内容结构调整,并提供 Python 源码示例。
好的描述应该让用户知道:
- 文章讲什么
- 能解决什么问题
- 是否有实操价值
3. 关键词布局优化
关键词布局不是机械重复,而是自然覆盖。
建议将核心关键词放在:
- 标题
- 首段
- H2 小标题
- 正文前半部分
- 图片 Alt
- URL
- Meta Description
同时补充相关长尾词,例如:
- AI Agent SEO
- SEO 自动化工具
- AI SEO 优化
- Python SEO 分析工具
- 大模型 SEO Agent
- 自动化内容优化
4. FAQ 优化
FAQ 对 SEO 很有帮助,因为它能覆盖更多长尾搜索问题。
例如:
## 常见问题
### AI Agent 可以完全替代 SEO 人员吗?
不能。AI Agent 可以提高效率,但 SEO 策略、品牌定位、商业判断仍然需要人工参与。
### SEO Agent 适合哪些网站?
适合内容型网站、博客、SaaS 官网、电商详情页、知识库和企业官网。
### AI 生成内容会影响 SEO 吗?
关键不在于是否由 AI 生成,而在于内容是否真实、有用、原创、满足用户需求。
FAQ 可以让页面覆盖更多问题型关键词,也能增强内容完整性。
四、如何设计一个 SEO Agent?
一个简化版 SEO Agent 可以包含以下模块:
SEOAgent
├── WebFetcher:抓取网页
├── HTMLParser:解析网页信息
├── SEORuleChecker:规则诊断
├── KeywordAnalyzer:关键词分析
├── ContentAdvisor:内容优化建议
└── ReportGenerator:生成 SEO 报告
其中:
WebFetcher负责请求页面 HTML;HTMLParser负责提取标题、Meta、正文、标题结构等;SEORuleChecker负责基础 SEO 检查;KeywordAnalyzer负责关键词覆盖情况分析;ContentAdvisor负责生成优化建议;ReportGenerator负责输出 Markdown 报告。
如果接入大模型,还可以让 Agent 做更复杂的事情,比如:
- 根据搜索意图重写标题;
- 自动生成文章大纲;
- 根据竞品页面补充内容缺口;
- 自动生成 FAQ;
- 判断文章是否存在信息增益不足的问题;
- 输出符合 E-E-A-T 标准的内容建议。
五、SEO Agent 源码示例
下面提供一个简化版 Python SEO Agent。它可以抓取网页,分析标题、描述、H 标签、关键词出现次数、图片 Alt、链接数量,并生成 Markdown 格式的 SEO 报告。
说明:这是一个教学示例,适合用于理解 SEO Agent 的基本结构。真实生产环境中还需要处理反爬、JS 渲染、登录态、搜索数据、日志分析、排名监控等问题。
1. 安装依赖
pip install requests beautifulsoup4 lxml
2. Python 源码
import re
import requests
from bs4 import BeautifulSoup
from urllib.parse import urljoin, urlparse
class SEOAgent:
def __init__(self, url: str, keyword: str):
self.url = url
self.keyword = keyword.strip()
self.html = ""
self.soup = None
self.data = {}
def fetch_html(self):
headers = {
"User-Agent": (
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) "
"AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/120.0 Safari/537.36"
)
}
response = requests.get(self.url, headers=headers, timeout=15)
response.raise_for_status()
self.html = response.text
self.soup = BeautifulSoup(self.html, "lxml")
def clean_text(self, text: str) -> str:
text = re.sub(r"\s+", " ", text)
return text.strip()
def parse_page(self):
if not self.soup:
raise ValueError("请先调用 fetch_html() 获取网页内容")
title_tag = self.soup.find("title")
title = title_tag.get_text(strip=True) if title_tag else ""
meta_desc = ""
desc_tag = self.soup.find("meta", attrs={"name": "description"})
if desc_tag and desc_tag.get("content"):
meta_desc = desc_tag.get("content").strip()
canonical = ""
canonical_tag = self.soup.find("link", rel="canonical")
if canonical_tag and canonical_tag.get("href"):
canonical = canonical_tag.get("href").strip()
h1_list = [self.clean_text(h.get_text()) for h in self.soup.find_all("h1")]
h2_list = [self.clean_text(h.get_text()) for h in self.soup.find_all("h2")]
h3_list = [self.clean_text(h.get_text()) for h in self.soup.find_all("h3")]
for tag in self.soup(["script", "style", "noscript"]):
tag.extract()
body_text = self.clean_text(self.soup.get_text(" "))
word_count = len(body_text)
images = self.soup.find_all("img")
image_count = len(images)
images_without_alt = [
img.get("src", "") for img in images
if not img.get("alt") or not img.get("alt").strip()
]
links = self.soup.find_all("a", href=True)
internal_links = []
external_links = []
base_domain = urlparse(self.url).netloc
for link in links:
href = urljoin(self.url, link.get("href"))
domain = urlparse(href).netloc
if domain == base_domain:
internal_links.append(href)
else:
external_links.append(href)
keyword_count = body_text.lower().count(self.keyword.lower())
self.data = {
"url": self.url,
"keyword": self.keyword,
"title": title,
"title_length": len(title),
"meta_description": meta_desc,
"meta_description_length": len(meta_desc),
"canonical": canonical,
"h1_list": h1_list,
"h2_list": h2_list,
"h3_list": h3_list,
"body_text": body_text,
"word_count": word_count,
"keyword_count": keyword_count,
"image_count": image_count,
"images_without_alt": images_without_alt,
"internal_link_count": len(set(internal_links)),
"external_link_count": len(set(external_links)),
}
def check_rules(self):
d = self.data
issues = []
suggestions = []
title = d["title"]
meta = d["meta_description"]
keyword = d["keyword"]
if not title:
issues.append("页面缺少 Title 标签。")
suggestions.append("为页面添加包含核心关键词的 Title。")
else:
if keyword.lower() not in title.lower():
issues.append("Title 中未包含目标关键词。")
suggestions.append(f"建议在 Title 中自然加入关键词:{keyword}。")
if d["title_length"] < 10:
issues.append("Title 过短,信息量不足。")
suggestions.append("建议将 Title 扩展为更具体的搜索结果标题。")
if d["title_length"] > 35:
issues.append("Title 可能过长,搜索结果中可能被截断。")
suggestions.append("建议控制 Title 长度,并将核心关键词放在前半部分。")
if not meta:
issues.append("页面缺少 Meta Description。")
suggestions.append("添加一段 70~120 个中文字符左右的页面描述。")
else:
if keyword.lower() not in meta.lower():
issues.append("Meta Description 中未包含目标关键词。")
suggestions.append("建议在描述中自然出现目标关键词,提高相关性和点击率。")
if d["meta_description_length"] < 50:
issues.append("Meta Description 偏短。")
suggestions.append("建议补充页面价值、适用人群和主要内容。")
if d["meta_description_length"] > 160:
issues.append("Meta Description 可能过长。")
suggestions.append("建议压缩描述,突出核心卖点。")
if len(d["h1_list"]) == 0:
issues.append("页面缺少 H1。")
suggestions.append("每个页面建议设置一个清晰的 H1。")
if len(d["h1_list"]) > 1:
issues.append("页面存在多个 H1。")
suggestions.append("建议每页只保留一个主 H1,其余改为 H2 或 H3。")
if len(d["h2_list"]) < 2:
issues.append("页面 H2 数量较少,内容结构可能不够清晰。")
suggestions.append("建议使用多个 H2 拆分主要内容模块。")
if d["word_count"] < 1000:
issues.append("页面正文内容较少,可能无法充分满足搜索意图。")
suggestions.append("建议补充背景、步骤、案例、FAQ 和总结等内容。")
if d["keyword_count"] == 0:
issues.append("正文中未出现目标关键词。")
suggestions.append("建议在首段、正文和小标题中自然加入目标关键词。")
if d["image_count"] > 0 and len(d["images_without_alt"]) > 0:
issues.append(f"有 {len(d['images_without_alt'])} 张图片缺少 Alt 文本。")
suggestions.append("为图片添加描述性 Alt,并在合适情况下包含相关关键词。")
if d["internal_link_count"] < 3:
issues.append("页面内链数量较少。")
suggestions.append("建议添加指向相关内容、产品页或专题页的站内链接。")
if not d["canonical"]:
issues.append("页面缺少 Canonical 标签。")
suggestions.append("如果页面可能存在重复 URL,建议添加 Canonical。")
return issues, suggestions
def generate_title_suggestions(self):
keyword = self.keyword
return [
f"{keyword}:完整流程、优化策略与实战指南",
f"如何用 {keyword} 提升网站搜索排名?",
f"{keyword} 实战教程:从页面诊断到内容优化",
]
def generate_meta_suggestion(self):
keyword = self.keyword
return (
f"本文系统介绍{keyword}的方法,包括网页诊断、标题优化、"
f"关键词布局、内容结构调整和自动化分析流程,适合 SEO 从业者和开发者参考。"
)
def generate_report(self):
issues, suggestions = self.check_rules()
d = self.data
report = []
report.append("# SEO Agent 分析报告")
report.append("")
report.append(f"分析页面:{d['url']}")
report.append(f"目标关键词:{d['keyword']}")
report.append("")
report.append("## 一、页面基础信息")
report.append("")
report.append(f"- Title:{d['title'] or '未设置'}")
report.append(f"- Title 长度:{d['title_length']}")
report.append(f"- Meta Description:{d['meta_description'] or '未设置'}")
report.append(f"- Meta Description 长度:{d['meta_description_length']}")
report.append(f"- Canonical:{d['canonical'] or '未设置'}")
report.append(f"- 正文字数:{d['word_count']}")
report.append(f"- 目标关键词出现次数:{d['keyword_count']}")
report.append(f"- 图片数量:{d['image_count']}")
report.append(f"- 缺少 Alt 的图片数量:{len(d['images_without_alt'])}")
report.append(f"- 内链数量:{d['internal_link_count']}")
report.append(f"- 外链数量:{d['external_link_count']}")
report.append("")
report.append("## 二、标题结构")
report.append("")
report.append("### H1")
if d["h1_list"]:
for h in d["h1_list"]:
report.append(f"- {h}")
else:
report.append("- 未发现 H1")
report.append("")
report.append("### H2")
if d["h2_list"]:
for h in d["h2_list"]:
report.append(f"- {h}")
else:
report.append("- 未发现 H2")
report.append("")
report.append("## 三、发现的问题")
report.append("")
if issues:
for item in issues:
report.append(f"- {item}")
else:
report.append("- 暂未发现明显 SEO 问题。")
report.append("")
report.append("## 四、优化建议")
report.append("")
if suggestions:
for item in suggestions:
report.append(f"- {item}")
else:
report.append("- 当前页面基础 SEO 状态较好,可继续关注内容质量和外部链接。")
report.append("")
report.append("## 五、推荐标题")
report.append("")
for title in self.generate_title_suggestions():
report.append(f"- {title}")
report.append("")
report.append("## 六、推荐 Meta Description")
report.append("")
report.append(self.generate_meta_suggestion())
return "\n".join(report)
def run(self):
self.fetch_html()
self.parse_page()
return self.generate_report()
if __name__ == "__main__":
url = "https://example.com"
keyword = "AI Agent SEO 优化"
agent = SEOAgent(url=url, keyword=keyword)
report = agent.run()
print(report)
六、如何接入大模型增强 SEO Agent?
上面的代码主要基于规则判断,适合完成基础 SEO 审计。如果要让它真正变成智能 Agent,可以接入大模型,让模型完成更高级的分析。
例如,你可以把页面信息整理成 Prompt:
你是一名资深 SEO 专家,请根据以下网页数据进行 SEO 分析。
目标关键词:AI Agent SEO 优化
页面 Title:
xxx
Meta Description:
xxx
H1:
xxx
H2:
xxx
正文摘要:
xxx
请输出:
1. 当前页面是否满足搜索意图;
2. Title 优化建议;
3. Meta Description 优化建议;
4. 内容缺口分析;
5. 推荐新增的 H2/H3;
6. FAQ 建议;
7. 内链建议;
8. 最终优化后的文章大纲。
模型可以生成更接近人工 SEO 顾问的建议。与纯规则系统相比,大模型更擅长理解语义、搜索意图和内容完整性。
七、进阶版 SEO Agent 可以做什么?
如果继续扩展,可以把 SEO Agent 做成一个完整系统。
1. 自动关键词挖掘
可以接入:
- Google Search Console
- 百度搜索资源平台
- 5118
- Ahrefs
- Semrush
- 站内搜索日志
- 用户访问日志
Agent 可以根据现有页面自动发现:
- 有曝光但点击率低的关键词;
- 排名在 8~20 名之间、适合重点优化的关键词;
- 搜索量高但网站未覆盖的关键词;
- 与页面主题相关的长尾词。
2. 自动竞品分析
Agent 可以抓取搜索结果前几名页面,分析它们的共同特征:
- 标题如何写;
- 内容字数多少;
- 覆盖了哪些小标题;
- 是否包含 FAQ;
- 是否有表格、图片、代码或案例;
- 是否有权威来源引用;
- 用户搜索意图是什么。
然后对比自己的网站,找出内容缺口。
例如竞品文章都包含“源码示例”,而你的文章没有,那么 Agent 就会建议增加代码实战部分。
3. 自动生成内容 Brief
SEO 内容 Brief 是写作前的重要文件,通常包括:
- 目标关键词;
- 搜索意图;
- 推荐标题;
- 推荐大纲;
- 必须覆盖的问题;
- 相关长尾词;
- 内链目标;
- 外链参考;
- FAQ;
- 内容风格;
- 字数建议。
AI Agent 可以自动生成 Brief,让写作者直接根据 Brief 创作。
4. 自动内链推荐
内链对 SEO 非常重要。Agent 可以扫描站内文章,建立内容主题图谱,然后推荐内链。
例如当前文章是“AI Agent 如何做 SEO 优化”,可以推荐链接到:
- AI Agent 入门教程;
- 大模型应用开发;
- Python 爬虫教程;
- SEO 关键词研究方法;
- 内容自动化生产系统。
合理的内链可以提升页面权重传递,也能帮助搜索引擎理解网站结构。
5. 自动监控排名和效果
SEO 不是一次性工作,而是持续优化过程。Agent 可以定期监控:
- 页面排名变化;
- 点击率变化;
- 展现量变化;
- 收录状态;
- 页面加载速度;
- 核心网页指标;
- 外链变化;
- 内容过期情况。
当页面排名下降时,Agent 可以自动分析原因:
- 竞品更新了内容;
- 页面 CTR 太低;
- 内容过时;
- 页面速度下降;
- 新增了重复页面;
- 搜索意图发生变化。
八、AI Agent 做 SEO 的注意事项
1. 不要只追求关键词密度
现代搜索引擎更关注内容是否满足用户需求。关键词自然出现即可,不要刻意堆砌。
错误示例:
AI Agent SEO 优化是 AI Agent SEO 优化的重要方法,如果你想做 AI Agent SEO 优化,就要了解 AI Agent SEO 优化。
这种内容可读性很差,也容易被判断为低质量。
2. AI 生成内容必须人工审核
AI Agent 可以提高效率,但不代表所有内容都可以直接发布。尤其是涉及医疗、金融、法律、投资等领域时,必须由专业人士审核。
3. 关注信息增益
如果一篇文章只是重复互联网上已有内容,没有新的观点、案例、数据或实操经验,很难长期获得好排名。
建议增加:
- 真实案例;
- 数据截图;
- 代码示例;
- 操作流程;
- 对比表格;
- 常见误区;
- 经验总结。
4. 技术 SEO 不能忽视
内容优化只是 SEO 的一部分。网站还需要关注:
- 页面加载速度;
- 移动端适配;
- Sitemap;
- Robots.txt;
- 结构化数据;
- HTTPS;
- Canonical;
- 404 页面;
- 重定向;
- Core Web Vitals。
SEO Agent 如果能结合技术检测,会更有实战价值。
九、总结
AI Agent 做 SEO 优化,本质上是把传统 SEO 工作流程自动化、智能化。它可以帮助我们完成网页抓取、页面诊断、关键词分析、标题优化、内容结构规划、FAQ 生成、内链推荐和 SEO 报告输出。
一个基础 SEO Agent 可以通过规则实现,例如检查 Title、Meta、H 标签、关键词出现次数、图片 Alt、内链数量等。而一个更高级的 SEO Agent,则需要结合大模型、搜索数据、竞品分析、站内日志和排名监控,形成持续优化闭环。
对于个人博客、内容网站、企业官网和 SaaS 产品站来说,SEO Agent 的最大价值不是“完全替代 SEO 人员”,而是让 SEO 人员和开发者从重复劳动中解放出来,把更多精力放在策略、内容质量和用户价值上。
如果你想快速开始,可以先使用本文提供的 Python 源码完成基础页面诊断,然后逐步接入大模型、关键词数据和排名监控,最终搭建属于自己的自动化 SEO 优化系统。