Titles and descriptions for a whole crawl
https://seolyticize.com /api/v1/tools/suggest_meta_tags Finds the crawled pages whose title or meta description is missing, duplicated, too long or too short (measured in pixels as Google draws them: a 600px title, a 920px description — not characters), and writes a new title and description for each, keeping the Search Console queries the page already earns clicks for. Every suggestion is pixel-checked again. Returns rows, and with format csv a spreadsheet of url, problems, current and suggested values and their widths. Answers 'fix the titles across the site'. Reads the latest complete crawl unless crawlId is given; urls narrows it. A paid Claude call per 25 pages.
Parameters
Idempotency-KeystringheaderRequest body
application/json
clientIdstringrequiredcrawlIdstringurlsstring[]problemsstring[]limitintegerformatstringmaxCostMicrosintegerdryRunboolean{
"clientId": "string",
"crawlId": "string",
"urls": [
"string"
],
"problems": [
"missing",
"duplicate",
"too_long",
"too_short"
],
"limit": 50,
"format": "rows",
"maxCostMicros": 0,
"dryRun": true
}Code samples
cURL
curl -X POST "https://seolyticize.com/api/v1/tools/suggest_meta_tags" \
-H "Authorization: Bearer $SEOLYTICIZE_API_KEY" \
-H "Idempotency-Key: <value>" \
-H "Content-Type: application/json" \
-d '{"clientId":"string","crawlId":"string","urls":["string"],"problems":["missing","duplicate","too_long","too_short"],"limit":50,"format":"rows","maxCostMicros":0,"dryRun":true}'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/suggest_meta_tags
WWW-AuthenticatestringSame as 400 · POST /api/v1/tools/suggest_meta_tags
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/suggest_meta_tags
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/suggest_meta_tags
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/suggest_meta_tags
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerSame as 400 · POST /api/v1/tools/suggest_meta_tags
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-ResetintegerRetry-AfterintegerSame as 400 · POST /api/v1/tools/suggest_meta_tags
X-RateLimit-LimitintegerX-RateLimit-RemainingintegerX-RateLimit-Resetinteger