对网页进行 40+ 项指标的全面 SEO 分析,支持站内多页面爬取和深度控制。
页面基础: URL、Title(长度 / 存在性)、Meta Description(长度 / 存在性)、Doctype、字符编码声明
语义结构: H1(存在 / 唯一 / 内容)、H2 存在性
链接分析: 链接总数、内部链接、外部链接、损坏链接(内部分部)、nofollow 内部链接
媒体检查: 图片 alt 优化检测、损坏图片检测
结构化数据: JSON-LD 提取、Microdata 提取
技术 SEO: Viewport 设置、AMP 版本、iframe 检测、robots.txt 存在性、favicon 存在性、Robots 阻止标记、Flash 检测
分析工具: Google Analytics(对象 + 函数)检测
内容质量: 页面文字数量统计、内容长度评估
page.evaluate 在浏览器环境中执行 40 余项 SEO 检测no-cors 模式(不透明,跳过损坏检测)
false、空字符串""、空数组[]表示页面确实缺少该元素,不是采集遗漏。
| 示例 | 含义 |
|---|---|
isH1: false, h1: "" | 页面没有 H1 标题 |
isJsonLd: false, jsonLdData: {} | 页面没有 JSON-LD 结构化数据 |
isMetaDescription: false, metaDescription: "" | 页面没有 Meta Description 标签 |
brokenLinks: [], brokenLinksCount: 0 | 没有检测到损坏链接 — 好评 |
internalNoFollowLinks: [] | 没有 nofollow 内链 — 不是问题 |
externalBrokenLinks: [] | 没有外部损坏链接 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
startUrl | array | — | 起始 URL 列表,支持批量输入多个网址 |
maxRequestsPerCrawl | integer | 10 | 最大爬取页面数(含起始页) |
maxDepth | integer | 不限制 | URL 路径深度限制,如 /blog/post 深度为 2 |
maxRequestRetries | integer | 2 | 页面加载失败后的最大重试次数 |
handlePageTimeoutSecs | integer | 3600 | 单个页面 SEO 分析的最长处理时间(秒) |
pageTimeout | integer | 60000 | 页面导航超时(毫秒),SPA 应用建议加大 |
userAgent | string | Chrome 84 | 自定义 User-Agent,用于模拟桌面端或移动端 |
viewPortWidth | integer | — | 浏览器视口宽度(像素),如 1440 |
viewPortHeight | integer | — | 浏览器视口高度(像素),如 900 |
seoParams | object | 见下方 | 自定义 SEO 检查阈值(JSON 格式) |
| 子参数 | 说明 |
|---|---|
maxTitleLength | Title 最大长度(超出则为过长) |
minTitleLength | Title 最小长度(不足则为过短) |
maxMetaDescriptionLength | Meta Description 最大长度 |
maxLinksCount | 链接数上限(超出则标记为过多) |
maxWordsCount | 正文字数下限(不足则标记为内容过短) |
outputLinks | 是否在输出中保留完整内部链接列表 |
workingStatusCodes | 视为正常的 HTTP 状态码列表 |
每个页面输出一个包含以下字段的 JSON 对象:
| 字段 | 类型 | 说明 |
|---|---|---|
url | string | 页面 URL |
title | string | 页面标题 |
isLoaded | boolean | 页面是否成功加载 |
errorMessage | string | 加载失败时的错误信息 |
isGoogleAnalyticsObject | boolean | 是否存在 Google Analytics 全局对象 |
isGoogleAnalyticsFunc | boolean | 是否存在 Google Analytics 追踪函数 |
isCharacterEncode | boolean | 是否声明了字符编码 |
isMetaDescription | boolean | 是否存在 Meta Description |
metaDescription | string | Meta Description 内容 |
isMetaDescriptionEnoughLong | boolean | Meta Description 长度是否合适 |
isDoctype | boolean | 是否声明了 Doctype |
isTitle | boolean | 是否存在 Title 标签 |
isTitleEnoughLong | boolean | Title 长度是否在合理范围内 |
isH1 | boolean | 是否存在 H1 标签 |
h1 | string | H1 标签内容 |
isH1OnlyOne | boolean | 是否只有一个 H1 |
isH2 | boolean | 是否存在 H2 标签 |
linksCount | integer | 页面链接总数 |
isTooEnoughLinks | boolean | 链接数量是否过多 |
internalNoFollowLinks | array | 内部 nofollow 链接列表 |
internalNoFollowLinksCount | integer | 内部 nofollow 链接数量 |
brokenLinksCount | integer | 损坏的内部链接数量 |
brokenLinks | array | 损坏的内部链接列表 |
externalBrokenLinksCount | integer | 损坏的外部链接数量 |
externalBrokenLinks | array | 损坏的外部链接列表 |
notOptimizedImagesCount | integer | 缺少 alt 属性的图片数量 |
notOptimizedImages | array | 缺少 alt 属性的图片列表 |
brokenImagesCount | integer | 损坏的图片数量 |
brokenImages | array | 损坏的图片列表 |
wordsCount | integer | 页面正文字数 |
isContentEnoughLong | boolean | 内容长度是否足够 |
isViewport | boolean | 是否设置了 viewport |
isAmp | boolean | 是否为 AMP 页面 |
isNotIframe | boolean | 是否不包含 iframe |
pageIsBlocked | boolean | 页面是否被 robots meta 标记为阻止索引 |
isUsingFlash | boolean | 页面是否使用 Flash |
robotsFileExists | boolean | robots.txt 是否可访问 |
faviconExists | boolean | favicon.ico 是否可访问 |
isJsonLd | boolean | 是否包含 JSON-LD 结构化数据 |
jsonLdData | object | JSON-LD 解析后的数据 |
isMicrodata | boolean | 是否包含 Microdata 结构化数据 |
microdata | array | Microdata 解析后的数据 |
输入: 单个起始 URL,爬取最多 10 个页面
输入: 批量对比多个网站首页
支持。可适当调大 pageTimeout(如 120000 毫秒),保证页面完全渲染后再分析。
false / "" / [] 表示页面确实缺少该元素,不是抓取失败,可直接用于优化依据。
将 maxRequestsPerCrawl 设为 1,工具只会检测传入的起始 URL。
isContentEnoughLong 依据什么判断?依据 seoParams.maxWordsCount,页面文本字数大于等于该值则为 true,否则为 false。
工具输出标准结构化 JSON,可直接用脚本 / 平台一键转换为 CSV、Excel 或报表。