SEO 巡检为什么不能只看关键词:内容、性能、DNS 与证书联合检查
SEO 巡检为什么不能只看关键词,真正困难的通常不是完成一次 API 调用,而是让结果可以校验、失败可以定位、后续能够回到原始证据。本文围绕“如何把页面内容、性能、DNS、SSL 和 WHOIS 组合成可复核的 SEO 巡检”给出一套可以直接落到任务状态和数据契约上的实现方式。
SEO 巡检为什么不能只看关键词,真正困难的通常不是完成一次 API 调用,而是让结果可以校验、失败可以定位、后续能够回到原始证据。本文围绕“如何把页面内容、性能、DNS、SSL 和 WHOIS 组合成可复核的 SEO 巡检”给出一套可以直接落到任务状态和数据契约上的实现方式。
问题与结果
将内容问题、性能问题和基础设施问题分开归因,报告不会把不可访问误判成内容缺失。
最终交付不是一段不可追溯的模型回答,而是一组带来源、版本、状态和失败记录的数据。这样既方便接入后续系统,也能在接口、页面或模型输出变化时定位问题。
适用场景
- 站点周度 SEO 巡检
- 新页面上线验收
- 域名与证书风险排查
实现前先确定边界
- 先确认页面可访问,再分析正文与性能
- DNS、证书和 WHOIS 分别记录采样时间
- 未采样或受限数据不得写成零或正常
可验证工作流

API 编排与职责
| 检查项 | 接口 | 请求方式 | 用途 |
|---|---|---|---|
| 页面正文 | 网页可读内容抽取 | POST | 判断页面主体内容是否可抽取 |
| 性能和 SEO | 网页性能与 SEO 评分 | GET | 获取页面速度和 SEO 相关评分 |
| DNS | 域名 DNS 信息查询 | GET | 检查解析记录 |
| SSL | 域名 SSL 证书信息解析 | GET | 检查证书信息和有效期 |
| WHOIS | 域名 Whois 查询 | GET | 获取域名注册相关信息 |
最小可运行实现
curl -G "https://api.gugudata.com/websitetools/pagespeed-score" \
--data-urlencode "appkey=YOUR_APPKEY" \
--data-urlencode "url=https://www.example.com/"
curl -G "https://api.gugudata.com/v2/websitetools/dns-lookup" \
--data-urlencode "appkey=YOUR_APPKEY" \
--data-urlencode "domain=example.com"
curl -G "https://api.gugudata.com/v2/websitetools/sslcertinfo" \
--data-urlencode "appkey=YOUR_APPKEY" \
--data-urlencode "domain=example.com"
可以把巡检结果归一成统一结构:
def build_audit_item(name: str, status: str, detail: str) -> dict:
"""Build a normalized SEO audit item."""
return {
"name": name,
"status": status,
"detail": detail,
}
巡检报告结构
| 模块 | 内容 |
|---|---|
| 内容检查 | 页面是否可抽取、正文长度、标题完整度 |
| 性能检查 | 页面速度、SEO 评分、可优化项 |
| 域名检查 | DNS 解析、WHOIS 信息、SSL 证书状态 |
| 行动建议 | 需要立刻处理、观察、可排期优化的事项 |
失败分类与降级
站点不可访问时,Agent 应先记录访问失败,再停止依赖页面内容的检查。DNS 或 SSL 查询失败时,不要把它解释成 SEO 内容问题,而应归类为站点基础状态异常。定时巡检最好保存上次结果,用变化趋势判断是否需要告警。
工程化注意事项
- 定时任务要控制频率,不要对同一个站点做过高并发巡检。
- 巡检报告要面向业务动作,不要堆砌无关技术细节。
- 对异常项保留原始接口状态,方便排查。
- 对首页、栏目页和重点落地页分别建任务,不要只看一个 URL。
数据契约与留痕
建议至少保存以下字段;真实项目可以继续拆分,但不要删除来源、版本和状态信息。
| 字段 | 作用 |
|---|---|
url |
来源或目标 URL,保留最终跳转前后的差异 |
checked_at |
带时区的采样或生成时间,判断数据新鲜度 |
content_status |
显式状态或结果,禁止用空值代替失败 |
performance_result |
显式状态或结果,禁止用空值代替失败 |
dns_result |
显式状态或结果,禁止用空值代替失败 |
certificate_result |
显式状态或结果,禁止用空值代替失败 |
whois_result |
显式状态或结果,禁止用空值代替失败 |
所有派生结果都应带生成时间和输入版本。发生重试时新增尝试记录,不要覆盖最后一次失败,以免排查时只剩“最终成功”而看不到中间问题。
验收清单
- 每项结论都有采样状态
- 页面阻塞与内容为空能被区分
- 历史报告可以比较同一指标口径
能力边界
单次评分和第三方查询只能说明采样时状态;搜索排名还受索引、竞争和用户行为等因素影响。
示例中的 YOUR_APPKEY 仅为占位符。真实密钥只能放在服务端环境变量或密钥管理系统中,不应进入前端、文章、日志或版本库。