SEO Analyzer
Pricing
from $1.00 / 1,000 analyzed pages
SEO Analyzer
Analyze the on-page SEO of public web pages: title, meta description, headings, canonical, Open Graph tags, word count, and a documented issue list. Plain HTTP fetch, no JavaScript rendering.
Pricing
from $1.00 / 1,000 analyzed pages
Rating
0.0
(0)
Developer
Cesar Santana
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
What it does
Analyzes the on-page SEO of public web pages. For each URL it fetches the page with a plain HTTP GET (no JavaScript rendering, no headless browser), parses the HTML, and delivers one record with the title, meta description, canonical link, robots meta, headings, Open Graph tags, language, word count, and a list of detected issues from a documented rule set.
Inputs
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
urls | array of strings | yes | ["https://example.com"] | Public page URLs to analyze. Maximum 500 per run. |
Outputs
One dataset record per URL. status: "ok" records carry the full analysis;
status: "error" records (transport failures: DNS, TCP, TLS, timeout, invalid
URL) carry only url, errorMessage, fetchedAt.
| Field | Type | Description |
|---|---|---|
status | string | ok (analysis delivered) or error (fetch failed). |
url | string | The requested URL. |
finalUrl | string | Final URL after redirects. |
statusCode | integer | HTTP status of the final response. |
responseTimeMs | integer | Fetch wall time in milliseconds. |
title | string | null | <title> contents. |
metaDescription | string | null | meta[name=description]. |
canonical | string | null | link[rel=canonical] href. |
robotsMeta | string | null | meta[name=robots]. |
h1 | array | Text of every <h1>. |
h2Count | integer | Number of <h2> elements. |
ogTitle / ogDescription / ogImage | string | null | Open Graph tags. |
lang | string | null | lang attribute of <html>. |
wordCount | integer | Visible body word count (script/style removed). |
issues | array | Issue codes (see rule set below). |
errorMessage | string | [error] Why the fetch failed. |
fetchedAt | string | ISO 8601 timestamp. |
Issue rule set: missing-title, title-too-short (<30 chars),
title-too-long (>60 chars), missing-meta-description, missing-h1,
multiple-h1, missing-canonical, non-200-status.
Example record:
{"status": "ok","url": "https://example.com","finalUrl": "https://example.com/","statusCode": 200,"responseTimeMs": 83,"title": "Example Domain","metaDescription": null,"canonical": null,"robotsMeta": null,"h1": ["Example Domain"],"h2Count": 0,"ogTitle": null,"ogDescription": null,"ogImage": null,"lang": null,"wordCount": 24,"issues": ["title-too-short", "missing-meta-description", "missing-canonical"],"fetchedAt": "2026-10-12T08:46:13.717Z"}
Pricing
Pay-per-event: one result event per analyzed URL — i.e. per record with
status: "ok". Records with status: "error" (failed fetches) are delivered
free. You are never charged for a URL we could not fetch, and a run that
delivers zero analyses fails loudly instead of charging anything.
Final per-result price is set at publish under the Gate 1 rule (>= 3x measured platform cost, <= usage-dominant incumbent's per-item price).
Limits
- Plain HTTP GET only — no JavaScript rendering, no headless browser. Pages that require JS to render will be analyzed as their raw HTML.
- Maximum 500 URLs per run; 20s per-request timeout; up to 2 retries with backoff on network errors and HTTP 5xx (4xx is not retried).
- A persistent 5xx is still an HTTP response: it is delivered as an
okrecord carrying thenon-200-statusissue. - URLs are fetched sequentially; runtime grows roughly linearly with URL count.
- If every URL fails to fetch, the run fails with a clear status message.
Changelog
0.0
- Initial release.
House conventions (not actor.json fields — set on the platform at publish):
pay-per-event monetization only; no Standby mode; limited permissions only.
Charge via Actor.charge({ eventName }) ONLY after a result is delivered;
never charge on failures. Fail loudly (Actor.fail) when zero results are
delivered, so broken runs never look successful.