SEO Smoke Test for CI
Pricing
from $5.00 / 1,000 audited pages
SEO Smoke Test for CI
Run deterministic SEO release checks with explicit PASS/FAIL results for HTTP, metadata, canonical, JSON-LD, internal links and sitemap.
Pricing
from $5.00 / 1,000 audited pages
Rating
0.0
(0)
Developer
Poyraz Demir
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Security
Limited permissionsShare
Run deterministic SEO release checks with explicit PASS/FAIL results for HTTP, metadata, canonical, JSON-LD, internal links and sitemap.
What is SEO Smoke Test for CI?
SEO Smoke Test for CI checks public HTML pages against a fixed release contract. Instead of a subjective score, every check returns PASS or FAIL with machine-readable details. Use it to catch release regressions before they reach production: a lost meta description, a second canonical tag, a stray noindex or a broken internal link.
The Actor processes up to 20 URLs in input order. Each page produces one dataset record with its final URL, HTTP status, overall status, individual checks, number of links checked and elapsed time. Every run also saves a JUnit XML report, so a CI job can show each check as a test case.
Checks included
The strict profile runs these checks in a fixed order:
http: the page returns a successful HTTP response with HTML content.title: exactly one non-empty title is present.meta_description: exactly one non-empty meta description is present.canonical: exactly one canonical link is present.meta_robots: the page does not containnoindex.json_ld: at least one valid JSON-LD block is present.internal_links: sampled same-origin links respond successfully.sitemap: a readable sitemap contains at least one entry.
You can disable sitemap validation or set maxLinks to zero when those checks are outside your release contract. Missing elements are failures in the strict profile, not warnings.
How to use it
- Add the public page URLs you want to test. The example input checks
https://example.com/, which fails several checks on purpose because it has no description, canonical link or JSON-LD. - Configure the request timeout, response-size limit, internal-link sampling and sitemap validation.
- Run the Actor manually, through the Apify API or as a step in your deployment pipeline.
- Treat a page-level
statusofFAILas a failed smoke test and inspect the named checks for the reason.
In CI, call the Actor after each deployment, wait for the run to finish and download the JUNIT record from the run's key-value store. Most CI systems can display it as a test report.
Input and output example
Input:
{"urls": ["https://example.com/"],"timeoutSecs": 10,"maxBytes": 1000000,"maxLinks": 10,"checkSitemap": true,"respectRobotsTxt": true}
The output record contains a checks array. For example, a missing description appears as:
{"url": "https://example.com/","finalUrl": "https://example.com/","status": "FAIL","httpStatus": 200,"checks": [{"name": "http", "status": "PASS", "details": {"httpStatus": 200}},{"name": "meta_description", "status": "FAIL", "details": {"count": 0}}],"linksChecked": 0,"durationMs": 260,"error": null}
The example is shortened to two checks; an actual strict run includes every enabled check. The JUnit report for the same two checks looks like this:
<testsuite name="seo-smoke" tests="2" failures="1"><testcase classname="seo-smoke.page" name="http (https://example.com/)" /><testcase classname="seo-smoke.page" name="meta_description (https://example.com/)"><failure message="meta_description failed">{"count": 0}</failure></testcase></testsuite>
Scope and access rules
This version does not run JavaScript, Lighthouse, Core Web Vitals, WCAG audits or external-link checks. It does not crawl a site: it checks only the submitted URLs, a sample of their internal links and the sitemap. It does not promise ranking improvements.
Only public pages are supported, with redirect validation, public-IP restrictions and optional robots.txt enforcement. The Actor does not log in, bypass anti-bot protection or use your cookies. Use it for your own sites or sites you are allowed to test, and stop if a site's terms or robots.txt rules disallow it.
Pricing
Pay-per-event pricing: $0.0015 per Actor start plus $0.005 per audited page. A page is charged when the full audit runs, whether the result is PASS or FAIL. Pages that cannot be fetched, return an HTTP error or are not HTML are not charged. If a run reaches your maximum cost per run, the Actor stops after the last page that fits and still saves the JUnit report for the pages it checked.
Troubleshooting and support
- A
FAILpage status is a completed audit with at least one failed contract check, not necessarily an Actor error. - Inspect the
nameanddetailsfields of each check before changing the page configuration. - Set
maxLinksto zero for a metadata-only smoke test. - Disable
checkSitemaponly when your release contract does not require a sitemap. - Increase
timeoutSecsfor a slow public page or reduce the URL batch.
For bug reports, use Actor Issues in Apify Console. Include the run ID and the failing check name. Do not post private URLs, credentials or personal data.