SEOMachine:AI驱动的SEO优化与内容生成智能体
posts posts 2026-04-08T16:35:00+08:00SEOMachine 是一个开源的 SEO AI Agent,支持 Google 搜索竞争分析、SEO 优化内容生成、关键词研究、竞品分析和排名追踪。技术栈包括 TypeScript、AI 多提供商支持(OpenAI/Anthropic等)、多爬虫支持(Firecrawl/Crawl4AI/Playwright)等。技术笔记TypeScript, SEO, AI Agent, 内容生成, 搜索引擎优化, 自动化目录
SEOMachine:AI驱动的SEO优化与内容生成智能体
1. 学习目标
通过本文你将掌握:
- 理解 SEOMachine 的核心价值和设计理念
- 熟练安装和配置工具
- 掌握 SEO 分析与内容生成的完整管道
- 理解多 AI 提供商和多爬虫的架构设计
- 定制和扩展 SEO 自动化功能
- 最佳实践和常见问题解决
2. 项目概述
2.1 什么是 SEOMachine
“SEO AI Agent - Analyze Google Search competition, generate SEO-optimized content”
SEOMachine 是一个开源的 SEO AI Agent,能够:
- 分析 Google 搜索竞争
- 生成 SEO 优化内容
- 关键词研究
- 竞品分析
- 排名追踪
核心价值:
| 痛点 | 解决方案 |
|---|---|
| SEO 分析耗时 | AI 自动分析 SERP |
| 内容优化难 | 实时数据驱动的优化建议 |
| 关键词研究繁琐 | 多源数据聚合分析 |
| 竞品监控难 | 自动化的竞品追踪 |
| 排名追踪麻烦 | 定期排名报告 |
2.2 项目数据
| 指标 | 数值 |
|---|---|
| Stars | 5.1k |
| Forks | 298 |
| Watchers | 27 |
| 贡献者 | 11 人 |
| 最新版本 | seomachine-v1-alpha-5 (2026-02-26) |
| 许可证 | MIT |
| 最新提交 | 2026-04-04(3天前) |
2.3 技术栈
├── TypeScript 89.1% — 核心逻辑
├── Python 10.9% — 爬虫脚本
└── 其他 — 配置/脚本核心技术组件:
| 组件 | 技术 | 说明 |
|---|---|---|
| AI 推理 | OpenAI/Anthropic/Azure/Ollama/Groq/DeepSeek | 多提供商支持 |
| 网页爬虫 | Firecrawl/Crawl4AI/Playwright | 多源爬虫 |
| CLI | TypeScript | 命令行界面 |
| 配置 | YAML | 配置文件 |
| 代理 | AI Agents | SEO 任务自动化 |
3. 系统架构
3.1 整体架构
┌─────────────────────────────────────┐
│ 用户交互层 │
│ seomachine CLI ←→ 配置文件 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ AI 推理层 │
│ OpenAI ←→ Anthropic ←→ Azure │
│ Ollama ←→ Groq ←→ DeepSeek │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ SEO 任务层 │
│ SERP分析 ←→ 内容生成 ←→ 关键词研究 │
│ 竞品分析 ←→ 排名追踪 │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ 数据爬取层 │
│ Firecrawl ←→ Crawl4AI ←→ Playwright│
└─────────────────────────────────────┘3.2 项目结构
seomachine/
├── src/
│ ├── agents/ # AI 代理
│ │ ├── seo-agent.ts
│ │ └── content-agent.ts
│ ├── crawlers/ # 爬虫模块
│ │ ├── firecrawl.ts
│ │ ├── crawl4ai.ts
│ │ └── playwright.ts
│ ├── providers/ # AI 提供商
│ │ ├── openai.ts
│ │ ├── anthropic.ts
│ │ └── ...
│ ├── tasks/ # SEO 任务
│ │ ├── serp-analysis.ts
│ │ ├── keyword-research.ts
│ │ └── ...
│ └── cli.ts # CLI 入口
├── config.yaml # 配置文件
├── package.json
├── tsconfig.json
└── README.md3.3 工作流程
SEO 分析与内容生成管道:
1. 配置 AI 提供商和爬虫
↓
2. 输入目标关键词或 URL
↓
3. SERP 分析(爬取搜索结果)
↓
4. 竞品内容分析
↓
5. 关键词研究(提取搜索量、竞争度)
↓
6. AI 生成 SEO 优化内容
↓
7. 输出报告(Markdown/HTML/JSON)4. 安装与配置
4.1 环境要求
| 要求 | 版本 |
|---|---|
| Node.js | ≥ 18.0 |
| npm/yarn | 最新版 |
| Python | ≥ 3.10(可选) |
4.2 安装步骤
全局安装(推荐)
npm install -g seomachine验证安装
seomachine --version
# seomachine v1.0.04.3 配置 AI 提供商
配置 OpenAI
seomachine auth --set-openai-key <your-api-key>配置 Anthropic
seomachine auth --set-anthropic-key <your-api-key>配置多个提供商
seomachine auth --set-openai-key <key>
seomachine auth --set-anthropic-key <key>
seomachine auth --set-groq-key <key>4.4 config.yaml 配置
# seomachine.yaml
project:
name: "my-seo-project"
url: "https://example.com"
providers:
default: "openai"
openai:
model: "gpt-4"
temperature: 0.7
anthropic:
model: "claude-sonnet-4"
crawlers:
default: "firecrawl"
firecrawl:
api-key: "${FIRECRAWL_API_KEY}"
crawl4ai:
api-url: "http://localhost:3000"
tasks:
serp-analysis: true
keyword-research: true
competitor-analysis: true
content-generation: true5. 核心功能详解
5.1 SERP 分析
自动爬取 Google 搜索结果
// src/tasks/serp-analysis.ts
interface SERPResult {
position: number;
title: string;
url: string;
snippet: string;
domain: string;
cached: boolean;
similar: string[];
}
async function analyzeSERP(query: string): Promise<SERPResult[]> {
// 爬取 SERP
const results = await crawler.search(query, { limit: 20 });
// 提取关键信息
return results.map(r => ({
position: r.position,
title: r.title,
url: r.url,
snippet: r.snippet,
domain: extractDomain(r.url),
cached: r.cached ?? false,
similar: r.similar ?? []
}));
}SERP 分析输出
{
"query": "best SEO tools 2026",
"totalResults": 1250000000,
"results": [
{
"position": 1,
"title": "Semrush - All-in-one SEO Tool",
"url": "https://www.semrush.com",
"domain": "semrush.com",
"wordCount": 1500,
"headings": ["Features", "Pricing", "FAQ"],
"links": 45000
}
],
"featuredSnippet": {...},
"peopleAlsoAsk": [...]
}5.2 关键词研究
// src/tasks/keyword-research.ts
interface KeywordData {
keyword: string;
searchVolume: number;
difficulty: number;
cpc: number;
competition: 'low' | 'medium' | 'high';
relatedKeywords: string[];
}
async function researchKeywords(seed: string): Promise<KeywordData[]> {
// 获取关键词数据
const keywords = await aiProvider.expandKeywords(seed);
// 获取搜索量/竞争度
const enriched = await Promise.all(
keywords.map(async (kw) => ({
...kw,
...await getKeywordMetrics(kw.keyword)
}))
);
return enriched
.sort((a, b) => b.searchVolume - a.searchVolume)
.slice(0, 50);
}5.3 竞品分析
// src/tasks/competitor-analysis.ts
interface CompetitorAnalysis {
url: string;
domain: string;
daMoz: number;
paMoz: number;
backlinks: number;
topKeywords: KeywordPosition[];
contentAnalysis: ContentMetrics;
}
async function analyzeCompetitor(url: string): Promise<CompetitorAnalysis> {
// 爬取竞品页面
const page = await crawler.crawl(url);
// 分析页面 SEO
const onPage = analyzeOnPage(page);
// 获取外链数据
const backlinks = await backlinkApi.getBacklinks(url);
// 获取排名数据
const rankings = await serpApi.getRankings(url);
return {
url,
domain: extractDomain(url),
daMoz: backlinks.domainAuthority,
paMoz: backlinks.pageAuthority,
backlinks: backlinks.total,
topKeywords: rankings.keywords.slice(0, 10),
contentAnalysis: onPage
};
}5.4 AI 内容生成
// src/agents/content-agent.ts
interface ContentRequest {
targetKeyword: string;
competitorUrls: string[];
wordCount: number;
tone: 'professional' | 'casual' | 'technical';
}
async function generateSEOContent(req: ContentRequest): Promise<string> {
// 1. 获取竞品内容摘要
const competitorSummaries = await Promise.all(
req.competitorUrls.map(url => summarizeContent(url))
);
// 2. 构建提示词
const prompt = buildPrompt({
keyword: req.targetKeyword,
summaries: competitorSummaries,
wordCount: req.wordCount,
tone: req.tone
});
// 3. 调用 AI 生成
const content = await aiProvider.generate(prompt);
// 4. SEO 检查
const optimized = await optimizeForSEO(content, {
keyword: req.targetKeyword,
minWordCount: req.wordCount
});
return optimized;
}6. 使用指南
6.1 基本命令
运行 SEO 项目
seomachine run "your project url or project name"分析关键词
seomachine keywords "best SEO tools 2026"竞品分析
seomachine analyze https://competitor.com生成内容
seomachine generate "best SEO tools" --word-count 2000排名追踪
seomachine track --keywords "SEO tools,content marketing"6.2 交互模式
# 启动交互模式
seomachine interactive
# 在交互模式中
seomachine > set project https://my-site.com
seomachine > analyze competitors
seomachine > generate content "best SEO tools"
seomachine > report6.3 输出格式
# 指定输出格式
seomachine run "project" --format markdown
seomachine run "project" --format html
seomachine run "project" --format json7. 多 AI 提供商架构
7.1 提供商配置
// src/providers/index.ts
const PROVIDERS = {
openai: {
client: OpenAIClient,
models: ['gpt-4', 'gpt-4-turbo', 'gpt-3.5-turbo']
},
anthropic: {
client: AnthropicClient,
models: ['claude-3-opus-4', 'claude-3-sonnet-4', 'claude-3-haiku']
},
azure: {
client: AzureOpenAIClient,
models: ['gpt-4', 'gpt-35-turbo']
},
ollama: {
client: OllamaClient,
models: ['llama2', 'mistral', 'codellama']
},
groq: {
client: GroqClient,
models: ['mixtral-8x7b', 'llama2-70b']
},
deepseek: {
client: DeepSeekClient,
models: ['deepseek-chat']
}
};7.2 动态提供商切换
// 根据任务选择最优提供商
async function selectProvider(task: SEOTask): Promise<AIProvider> {
const provider = PROVIDERS[task.preferredProvider]
?? PROVIDERS.openai;
// 检查 API 配额
if (await provider.isRateLimited()) {
// 切换到备用提供商
return selectAlternateProvider(task);
}
return provider;
}8. 多爬虫架构
8.1 爬虫配置
// src/crawlers/index.ts
const CRAWLERS = {
firecrawl: {
class: FirecrawlCrawler,
features: ['javascript-rendering', 'screenshots', 'links']
},
crawl4ai: {
class: Crawl4AICrawler,
features: ['fast', 'markdown', 'html']
},
playwright: {
class: PlaywrightCrawler,
features: ['full-control', 'cookies', 'stealth']
}
};8.2 爬虫选择策略
| 任务 | 推荐爬虫 | 原因 |
|---|---|---|
| 动态页面 | Playwright | JS 渲染完整 |
| 批量爬取 | Firecrawl | 速度快 |
| Markdown 提取 | Crawl4AI | 结构化输出 |
| 截图需求 | Firecrawl | 内置截图 |
// 自动选择最优爬虫
function selectCrawler(task: CrawlTask): Crawler {
if (task.needsJS) return CRAWLERS.playwright;
if (task.needsScreenshot) return CRAWLERS.firecrawl;
return CRAWLERS.crawl4ai;
}9. 最佳实践
9.1 API 配额管理
// 多提供商负载均衡
class ProviderPool {
private providers: AIProvider[];
async generate(prompt: string): Promise<string> {
// 轮询可用提供商
for (const provider of this.providers) {
if (!await provider.isRateLimited()) {
return provider.generate(prompt);
}
}
// 全部限流,等待后重试
await this.waitForQuota();
return this.generate(prompt);
}
}9.2 缓存策略
// SERP 结果缓存
const serpCache = new LRUCache<string, SERPResult[]>({
max: 1000,
ttl: 1000 * 60 * 60 * 24 // 24小时
});
async function getSERPWithCache(query: string): Promise<SERPResult[]> {
const cached = serpCache.get(query);
if (cached) return cached;
const result = await crawler.search(query);
serpCache.set(query, result);
return result;
}9.3 错误处理
try {
await seomachine.run(project);
} catch (error) {
if (error instanceof RateLimitError) {
console.log('API 限流,等待后重试...');
await sleep(60000);
return seomachine.run(project);
}
if (error instanceof CrawlError) {
console.log('爬取失败,切换爬虫...');
return seomachine.run(project, { crawler: 'playwright' });
}
throw error;
}10. 常见问题
Q: API 限流怎么办?
# 配置多个 API Key
seomachine auth --set-openai-key <key1>
seomachine auth --set-openai-key-2 <key2>Q: 爬取失败?
# 切换爬虫
seomachine run "project" --crawler playwrightQ: 如何提高生成质量?
# 使用更强的模型
seomachine config set default-provider anthropic
seomachine config set anthropic.model claude-3-opus-4Q: 批量处理大项目?
# 使用批处理模式
seomachine batch --file projects.csv --parallel 511. 与类似工具对比
| 工具 | 平台 | AI 生成 | 多爬虫 | 多提供商 |
|---|---|---|---|---|
| SEOMachine | CLI/API | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Semrush | SaaS | ⭐⭐⭐ | ❌ | ❌ |
| Ahrefs | SaaS | ⭐⭐⭐ | ❌ | ❌ |
| SurferSEO | Web | ⭐⭐⭐⭐ | ❌ | ❌ |
SEOMachine 优势:
- 完全开源可定制
- 支持自托管
- 多 AI 提供商灵活切换
- 多爬虫适应性强
- 开源社区活跃
12. 总结
SEOMachine 是 SEO 智能自动化的利器:
| 特性 | 说明 |
|---|---|
| AI 驱动 | 多提供商生成高质量内容 |
| 多爬虫 | Firecrawl/Crawl4AI/Playwright |
| 多提供商 | OpenAI/Anthropic/Groq/DeepSeek 等 |
| 开源免费 | MIT 许可证 |
| 高度可定制 | TypeScript 源码 |
适用场景:
- SEO 机构批量优化
- 内容农场自动化
- 中小企业 SEO
- 竞品监控与追踪
- 内容营销团队
🦞 每日08:00自动更新