Compare staging with production
https://seolyticize.com /api/v1/tools/compare_sites Fetches the same paths on two origins — staging (a) and production (b), say — and lists every difference in what they tell search engines: status, robots, canonical (read on each side's own host), hreflang, title, H1 and structured data, with critical ones first and a Markdown summary. Paths default to the client's latest crawl (its shallowest pages, spread across templates) or, without a crawl, the links on b's home page; paths narrows it. sendCrawlAuthTo sends the client's set_crawl_auth credentials (basic auth, headers, cookies) to that side only, for a password-protected staging site. When one side's home redirects to the other's host (www to the apex), redirect names the status and target and nothing is diffed, since that side has no pages of its own; single paths that redirect across are listed in redirected. followRedirect: true follows that redirect instead of stopping: each path on the redirecting side is fetched to where it lands and compared with the same path on the other side (the redirect's destination), redirectMap lists where each landed, and a path the redirect sends elsewhere (the home page, a 404) or a temporary redirect shows as a change; redirect stays reported and followedRedirect says it was followed. Answers 'is staging ready to go live', 'what will the migration change' and 'does www still redirect every page to the same path'. No vendor charge; it fetches pages on the client's behalf, so it needs project:manage.
Parameters
Idempotency-KeystringheaderRequest body
application/json
clientIdstringrequiredastringrequiredbstringrequiredpathsstring[]maxPagesintegersendCrawlAuthTostringfollowRedirectboolean{
"clientId": "string",
"a": "string",
"b": "string",
"paths": [],
"maxPages": 50,
"sendCrawlAuthTo": "a",
"followRedirect": false
}Code samples
cURL
curl -X POST "https://seolyticize.com/api/v1/tools/compare_sites" \
-H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
-H "Idempotency-Key: <value>" \
-H "Content-Type: application/json" \
-d '{"clientId":"string","a":"string","b":"string","paths":[],"maxPages":50,"sendCrawlAuthTo":"a","followRedirect":false}'TypeScript
Python
Go
PHP
Ruby
Java
Responses
data, and its meta.Example
{
"data": {},
"meta": {
"requestId": "string",
"costMicros": 0,
"cached": true,
"cachedFrom": "string",
"dataAsOf": "string",
"sources": [
"string"
],
"partial": true,
"next": [
{
"tool": "string",
"args": {},
"why": "string"
}
],
"nextCursor": "string",
"dryRun": true
}
}Schema
datarequiredmetaobjectrequiredShow child parameters
requestIdstringrequiredcostMicrosintegerrequiredcachedbooleanrequiredcachedFromstringdataAsOfstringsourcesstring[]partialbooleanrequirednextobject[]requiredShow child parameters
toolstringargsobjectwhystringnextCursorstringdryRunbooleanX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerX-Request-IdstringExample
{
"error": "string",
"code": "string",
"next": "string",
"requestId": "string"
}Schema
errorstringrequiredcodestringnextstringrequestIdstringX-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/compare_sites
WWW-AuthenticatestringSame as 400 · POST /api/v1/tools/compare_sites
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/compare_sites
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/compare_sites
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/compare_sites
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/compare_sites
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerRetry-AfterintegerSame as 400 · POST /api/v1/tools/compare_sites
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-Resetinteger