SEO Meta Tag Analyzer avatar

SEO Meta Tag Analyzer

Pricing

Pay per usage

Go to Apify Store
SEO Meta Tag Analyzer

SEO Meta Tag Analyzer

Audit any URL for SEO: title length, meta description, Open Graph tags, heading hierarchy, image alt texts, keyword density, mobile viewport, canonical URL, schema markup, and more.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

CQ

CQ

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

2

Monthly active users

17 days ago

Last modified

Share

Comprehensive on-page SEO audit for any URL. Analyzes 15+ ranking factors and generates both structured JSON and a visual HTML report.

What it checks

CheckDetails
Title tagLength (30–60 chars optimal), presence
Meta descriptionLength (70–160 chars optimal), presence
HeadingsH1 count, H1–H6 hierarchy validation
Open Graphog:title, og:description, og:image, all OG tags
Twitter Cardstwitter:card, twitter:title, twitter:image, etc.
ImagesAlt text audit, missing alt count/percent
Canonical URLPresence, self-referencing check
MobileViewport meta tag
Schema markupJSON-LD, Microdata, RDFa detection + type extraction
Keyword densityAuto-detect from title/description OR custom keywords. Placement in title/H1/description
Robotsnoindex/nofollow detection
Languagehtml lang attribute
LinksInternal vs external link count
ContentWord count
CharsetCharacter encoding declaration

Input

FieldTypeDefaultDescription
urlsstring[]requiredOne or more page URLs to analyze
targetKeywordsstring[][] (auto-detect)Keywords to check density for. If empty, the top 5 non-stopword terms from title+description are used.
checkCanonicalbooleantrueVerify canonical URL matches the page URL
checkSchemaMarkupbooleantrueScan for JSON-LD, Microdata, and RDFa
proxyConfigurationobjectnoneProxy settings (uses HTTPS proxy agent when provided)

Output

Dataset (one row per URL)

Each row includes:

FieldDescription
seoScore0–100 composite score
titleTag, titleLength, titleStatusTitle analysis (good / too_short / too_long / missing)
metaDescription, descriptionLength, descriptionStatusDescription analysis
metaRobots, isNoindexRobots directive
headingsFull H1–H6 breakdown with text (capped at 100 chars per heading)
h1Count, headingHierarchyValidH1 count and whether levels skip (e.g., H1→H3)
totalImages, imagesMissingAlt, imagesDetailImage audit (first 50 images with src/alt)
ogTags, ogTagCountEvery og:* property found
twitterTags, twitterCardTypeEvery twitter:* name found
canonicalUrl, hasCanonical, canonicalMatchCanonical check
viewport, hasViewportMobile viewport meta tag
charset, hasCharset, htmlLangEncoding + language
internalLinkCount, externalLinkCountLink tally
wordCountWhitespace-split word count of <body> text
keywordAnalysisPer-keyword: count, density %, in title, in H1, in description
schemaMarkup, schemaTypesFoundStructured data types found (JSON-LD/Microdata/RDFa)
issues, warnings, passedFindings grouped by severity
issueCount, warningCount, passedCountCounts for quick scanning
analyzedAtISO timestamp
errorOnly present on fetch failures

Key-Value Store

KeyContent typeDescription
OUTPUTapplication/jsonFull JSON array of all URL results — the same dataset items aggregated into one record for single-download access.
reporttext/htmlHuman-readable HTML audit report with tables, colored score badges (red/orange/green), issues/warnings/passed lists, and keyword tables. Open in browser.

Scoring

Score starts at 100 and deducts points:

IssueDeduction
Missing title tag−15
Missing meta description−10
Missing H1−10
Missing viewport−8
Noindex directive−5
Title too short−5
Title too long−3
Description too short−3
Description too long−2
Multiple H1 tags−3
Missing canonical−3
Heading hierarchy gaps−2
Missing OG tags (og:title/og:description/og:image)−2 each
Missing lang attribute−2
No schema markup found−3
Images without alt textup to −10 (scaled by count)

Final score is clamped to [0, 100].

Example input

{
"urls": [
"https://apify.com",
"https://example.com",
"https://github.com"
],
"targetKeywords": ["scraping", "automation"],
"checkCanonical": true,
"checkSchemaMarkup": true
}

Example output (dataset row, truncated)

{
"url": "https://apify.com",
"seoScore": 95,
"titleTag": "Apify: Full-stack web scraping and data extraction platform",
"titleLength": 59,
"titleStatus": "good",
"metaDescription": "Cloud platform for web scraping, browser automation...",
"descriptionLength": 154,
"descriptionStatus": "good",
"h1Count": 1,
"totalImages": 108,
"imagesMissingAlt": 0,
"hasCanonical": true,
"canonicalMatch": true,
"hasViewport": true,
"ogTagCount": 11,
"schemaTypesFound": "Organization, WebSite",
"wordCount": 1847,
"internalLinkCount": 81,
"externalLinkCount": 55,
"issues": [],
"warnings": ["No structured data (schema markup) found", "..."],
"passed": ["Title length is optimal", "Meta description length is optimal", "..."],
"issueCount": 0,
"warningCount": 2,
"passedCount": 8
}

Error handling

  • Each URL is processed independently. A failure on one URL does not abort the run — it's recorded in the dataset with error set and seoScore: 0.
  • Transient network issues (timeouts, DNS failures, non-2xx status) are surfaced as the error field.
  • HTTP redirects are followed automatically (max 3 hops).
  • Request timeout: 30 seconds per URL.

Use cases

  • Content teams: audit blog posts before publishing
  • SEO agencies: bulk-audit client pages in one run
  • Developers: CI/CD SEO checks on staging environments
  • Marketers: compare competitor page optimization
  • Migration QA: verify canonicals/meta tags after site redesigns

Notes

  • The actor uses native fetch() when no proxy is configured, and switches to https-proxy-agent when proxyConfiguration is provided.
  • User-Agent: Mozilla/5.0 (compatible; SEOAnalyzer/1.0).
  • Word count is approximate — counts whitespace-separated tokens from <body> text, so it overcounts navigation/footer text.
  • Image audit caps the detail array at 50 images to keep dataset rows manageable (the totalImages / imagesMissingAlt counts reflect all images).

Version history

  • v1.1 — KVS schema cleaned up (was listing wrong nested fields); README expanded with full output spec and edge-case notes
  • v1.0 — Initial release