自动化 SEO 引擎:基于 Agent 的关键词巡检与 Meta 结构优化
自动化 SEO 引擎:基于 Agent 的关键词巡检与 Meta 结构优化
对于独立开发者而言,搜索引擎优化(SEO)是获取免费有机流量(Organic Traffic)最持久的通道。然而,人工巡检每个页面的 OpenGraph 标签、Sitemap 完整性以及关键词在 Google 搜索结果(SERP)中的排名极度耗时。本文设计并实现一套定时的智能 SEO 巡检 Agent,能够自动扫描网页结构,识别缺失的 Meta 标签,并结合 LLM 给出吸引点击的 Title 与 Description 优化方案。
flowchart TD A[Cron 定时任务 / URL 输入] --> B[Headless HTML 抓取 & Cheerio DOM 解析] subgraph 确切 SEO 防线巡检 B --> B1[检查 Title / Meta Description 长度与存在性] B --> B2[检查 OpenGraph / Twitter Card 结构化标签] B --> B3[检查 H1 标签唯一性与图片 alt 缺失] end B1 & B2 & B3 -- 发现缺失 / 低质量 Meta -- > C[SEO Agent 语义优化组件] C --> D[LLM 结合页面正文生成高清关键词 Meta 方案] D --> E[输出结构化 JSON 报告或自动提交 Git PR]一、独立产品常见 SEO 漏洞剖析
许多开发者在上线产品时,往往只关注页面功能,忽略了最基础的 SEO 规范:
- 缺失 Meta Description:导致 Google 在搜索结果中直接随机截取页面底部无意义的 Cookie 提示文案,极大降低了用户点击率(CTR)。
- H1 标签滥用或缺失:在一个页面中放了 5 个
<h1>标签,或者完全没有<h1>,破坏了搜索引擎蜘蛛对页面主题的权重推导。 - OpenGraph 动态卡片未配置:当用户把你的产品链接分享到 Twitter / X 或 Discord 时,无法生成带有高清预览图的卡片,损失了大量社交流量。
自动化 SEO Agent 的目标,就是把这些检查项标准化,变成无人值守的自动化流程。
二、基于 Cheerio 的页面 DOM 静态解析层
首先,我们需要一个轻量的 DOM 解析器,在不启动重型无头浏览器的前提下,极速提取页面的全部 SEO 元素。
// src/seoInspector.ts import * as cheerio from 'cheerio'; export interface SEODiagnostics { url: string; title: string | null; titleLength: number; metaDescription: string | null; descriptionLength: number; h1Count: number; h1Text: string | null; missingImageAltCount: number; hasOpenGraphImage: boolean; issues: string[]; } /** * 静态解析网页 DOM 并扫描基础 SEO 漏洞 */ export async function inspectPageSEO(url: string): Promise<SEODiagnostics> { const response = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0 (Compatible; IndependentSEOAgent/1.0)', }, }); const html = await response.text(); const $ = cheerio.load(html); const title = $('title').text().trim() || null; const metaDescription = $('meta[name="description"]').attr('content')?.trim() || null; const h1Elements = $('h1'); const ogImage = $('meta[property="og:image"]').attr('content'); // 计算未设置 alt 属性的图片数量 let missingImageAltCount = 0; $('img').each((_, el) => { const alt = $(el).attr('alt'); if (!alt || !alt.trim()) missingImageAltCount++; }); const issues: string[] = []; if (!title) issues.push('严重: 页面缺少 <title> 标签'); else if (title.length < 10 || title.length > 60) issues.push('警告: <title> 字数建议控制在 10-60 字之间'); if (!metaDescription) issues.push('严重: 页面缺少 <meta name="description"> 标签'); else if (metaDescription.length < 50 || metaDescription.length > 160) issues.push('警告: Meta Description 字数建议控制在 50-160 字之间'); if (h1Elements.length === 0) issues.push('严重: 页面缺少 <h1> 标签'); else if (h1Elements.length > 1) issues.push('警告: 页面存在多个 <h1> 标签,破坏了主标题权重'); if (!ogImage) issues.push('警告: 缺少 og:image 社交分享图片卡片'); return { url, title, titleLength: title ? title.length : 0, metaDescription, descriptionLength: metaDescription ? metaDescription.length : 0, h1Count: h1Elements.length, h1Text: h1Elements.first().text().trim() || null, missingImageAltCount, hasOpenGraphImage: !!ogImage, issues, }; }三、结合 LLM 的 SEO 语义重构组件
当发现页面的 Title 或 Meta Description 缺失或太短时,我们提取页面正文文本,调用 LLM 自动生成兼顾**搜索关键词(Keywords)与高点击吸引力(CTR-friendly)**的元数据:
// src/seoAgentOptimizer.ts import { OpenAI } from 'openai'; import { SEODiagnostics } from './seoInspector'; const openai = new OpenAI(); export interface SEOOptimizationSuggestion { suggestedTitle: string; suggestedDescription: string; focusKeywords: string[]; } export async function generateSEOOptimization( diagnostics: SEODiagnostics, pageMainText: string ): Promise<SEOOptimizationSuggestion> { const prompt = `你是一个顶级独立产品的 SEO 优化专家。请根据以下页面目前的 SEO 诊断结果与页面正文内容,生成更符合 Google 搜索结果排名的 Title 与 Description。 【目前诊断结果】 - 原始 Title: ${diagnostics.title || '缺失'} - 原始 Description: ${diagnostics.metaDescription || '缺失'} - 发现的缺陷: ${diagnostics.issues.join('; ')} 【页面正文切片】 ${pageMainText.slice(0, 1500)} 【优化要求】 1. Title 要求:中文 20-50 字,包含核心强搜索意图词,使用标点隔开,避免浮夸营销词。 2. Description 要求:中文 80-140 字,准确概括页面解决的核心问题,包含自然Calls to Action。 3. 提取 3 个核心 Target Keywords。 请返回 JSON 格式。`; const response = await openai.chat.completions.create({ model: 'gpt-4o-mini', response_format: { type: 'json_object' }, messages: [ { role: 'system', content: '你只返回包含 suggestedTitle, suggestedDescription, focusKeywords 的 JSON。' }, { role: 'user', content: prompt } ], temperature: 0.2, }); return JSON.parse(response.choices[0].message.content || '{}'); }四、Cron 定时巡检与 Telegram 报告送达
将上述模块包装为 Cron 定时任务,每周日凌晨自动巡检产品的落地页与博客路径,并将发现的缺陷与优化方案直接推送到开发者的 Telegram:
// cron/weeklySeoAudit.ts import { inspectPageSEO } from '../src/seoInspector'; import { generateSEOOptimization } from '../src/seoAgentOptimizer'; import { TelegramNotifier } from '../lib/telegramAlert'; const targetURLs = [ 'https://yourproduct.com/', 'https://yourproduct.com/pricing', 'https://yourproduct.com/blog/sqlite-optimization', ]; async function runWeeklySEOAudit() { console.log('🔍 开始执行每周自动化 SEO 巡检...'); const notifier = new TelegramNotifier({ botToken: process.env.TELEGRAM_BOT_TOKEN!, chatId: process.env.TELEGRAM_CHAT_ID!, }); for (const url of targetURLs) { const diag = await inspectPageSEO(url); if (diag.issues.length > 0) { // 发现问题,调用 AI 生成建议 const opt = await generateSEOOptimization(diag, '页面正文模拟文本...'); const report = `🔍 *SEO 巡检发现问题*: \`${url}\`\n\n` + `缺陷: ${diag.issues.join('\n- ')}\n\n` + `💡 *AI 建议优化方案*:\n` + `*新 Title*: ${opt.suggestedTitle}\n` + `*新 Desc*: ${opt.suggestedDescription}\n` + `*关键词*: \`${opt.focusKeywords.join(', ')}\``; await notifier.sendAlert(report); } } } runWeeklySEOAudit();五、架构总结
SEO 优化不是一次性的工作,而是一个持续监测与微调的过程。
用确定性的 DOM 解析捕获物理漏洞,用 AI 的语义理解生成符合搜索意图的标题与描述,用自动化 Cron 定时关卡守护页面健康,独立开发者就能以极低的精力投入,源源不断地从搜索引擎获取长尾流量。