SEO Meta Tags, Open Graph & Schema.org Extractor avatar

SEO Meta Tags, Open Graph & Schema.org Extractor

Pricing

Pay per usage

Go to Apify Store
SEO Meta Tags, Open Graph & Schema.org Extractor

SEO Meta Tags, Open Graph & Schema.org Extractor

Bulk on-page SEO check: title, meta description, canonical, robots, hreflang, Open Graph, Twitter card, JSON-LD and microdata types with missing-property checks, headings, alt text and an issues list per page. Paste URLs or crawl a site. Free while in launch; planned price $2 per 1,000 pages.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Adam Hale

Adam Hale

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Share

SEO Meta Tags, Open Graph & Schema.org Extractor: bulk on-page SEO check

Paste page URLs (or one start page per site and let it crawl) and get one row per page with everything that decides how the page shows up in Google and on social media: title, meta description, canonical, robots directives, hreflang, Open Graph, Twitter card, JSON-LD / microdata / RDFa types with missing-property checks, headings, image alt text, word count and a list of SEO issue codes.

  • One flat row per page, ready for a spreadsheet: lengths, counts and issue codes instead of raw HTML.
  • Structured data checks: JSON-LD (including @graph) is parsed, broken blocks are counted, and common types (Product, Offer, Article, Organization, LocalBusiness, BreadcrumbList, FAQPage, Event, Recipe, JobPosting, VideoObject, Review, SoftwareApplication, WebSite…) are checked for the properties Google requires or recommends.
  • Paste URLs or crawl: set Pages per site above 1 to follow internal links from each start page.
  • Free while in launch; planned price $2 per 1,000 pages (pay per event). Pages that fail, are blocked or are not HTML would not be charged.
  • Fast and polite: no browser, no proxy, honest User-Agent, robots.txt respected. The default 3-page input takes about 2 seconds.

What can I use it for?

  • SEO audits: find missing or too-long titles and descriptions, duplicate H1s, missing canonicals, noindex pages and pages without structured data across a whole site.
  • Social previews: check that every page has og:title, og:description, og:image and a Twitter card before a launch or campaign.
  • Rich results: list which pages carry Product, Article, FAQ or Breadcrumb markup and which required properties are missing.
  • Migrations and releases: crawl staging and production and compare titles, canonicals and robots tags.
  • Competitor research: see how competitors title and describe their pages and which schema types they use.

What data does it return?

FieldDescription
url, finalUrl, status, httpStatus, redirectChainWhat was requested, where it ended and how. status is ok or why the page was not analysed
indexableHTTP 200, no noindex in meta robots or X-Robots-Tag, and the canonical is missing or points to the page itself
issues, issueCountIssue codes (list below)
title, titleLength, metaDescription, metaDescriptionLengthText and character counts
h1, h1Count, h2, h2Count, h3CountHeadings (first 20 texts) and counts
canonicalUrl, canonicalIsSelf, metaRobots, xRobotsTagIndexing signals (metaRobots merges robots and googlebot)
lang, charset, viewport, generator, faviconPage basics
hreflang[{lang, url}] alternates
openGraph, twitterCardAll og:* and twitter:* tags, image URLs made absolute
schemaTypes, microdataTypes, rdfaTypesStructured-data types found
schemaIssues, jsonLdBlocksInvalidMissing required/recommended properties per type; JSON-LD blocks that are not valid JSON
jsonLdParsed JSON-LD objects, only with Include full JSON-LD on
wordCount, imagesCount, imagesMissingAlt, internalLinksCount, externalLinksCount, nofollowLinksCountContent and link counts
depth, foundOnCrawl depth and the page that linked to it (crawl mode)
responseTimeMs, contentType, fetchedAtResponse details

Issue codes: TITLE_MISSING, TITLE_TOO_LONG (over 60 characters), TITLE_TOO_SHORT (under 30), META_DESCRIPTION_MISSING, META_DESCRIPTION_TOO_LONG (over 160), META_DESCRIPTION_TOO_SHORT (under 70), MULTIPLE_META_DESCRIPTIONS, H1_MISSING, MULTIPLE_H1, CANONICAL_MISSING, MULTIPLE_CANONICALS, CANONICAL_POINTS_ELSEWHERE, NOINDEX, LANG_MISSING, VIEWPORT_MISSING, OG_TITLE_MISSING, OG_DESCRIPTION_MISSING, OG_IMAGE_MISSING, TWITTER_CARD_MISSING, HREFLANG_INVALID_CODE, HREFLANG_NO_SELF_REFERENCE, JSON_LD_INVALID, NO_STRUCTURED_DATA, SCHEMA_MISSING_REQUIRED_PROPERTIES, IMAGES_MISSING_ALT (no alt attribute at all; alt="" counts as decorative), LOW_WORD_COUNT (under 200 words).

Pages that could not be analysed get a row too, with status (http_error, not_html, blocked_by_site, disallowed_by_robots_txt, robots_txt_unreachable, unreachable, timeout, skipped, invalid_url) and a readable error. A SUMMARY record in the key-value store counts statuses and issues across the run. The Output tab has three views: Overview, Social tags and Structured data.

Example output

From a real run on 2026-10-12 (shortened):

{
"url": "https://www.python.org/",
"status": "ok",
"httpStatus": 200,
"indexable": true,
"issueCount": 6,
"issues": ["TITLE_TOO_SHORT", "META_DESCRIPTION_TOO_SHORT", "MULTIPLE_H1", "CANONICAL_MISSING", "TWITTER_CARD_MISSING", "SCHEMA_MISSING_REQUIRED_PROPERTIES"],
"title": "Welcome to Python.org",
"titleLength": 21,
"metaDescription": "The official home of the Python Programming Language",
"metaDescriptionLength": 52,
"h1Count": 5,
"canonicalUrl": null,
"lang": "en",
"openGraph": {"type": "website", "site_name": "Python.org", "title": "Welcome to Python.org", "image": "https://www.python.org/static/opengraph-icon-200x200.png"},
"twitterCard": {},
"schemaTypes": ["WebSite"],
"schemaIssues": ["WebSite: missing required name"],
"wordCount": 1012,
"imagesMissingAlt": 0,
"internalLinksCount": 64,
"externalLinksCount": 78
}

A page that was not analysed (not charged):

{"url": "https://www.g2.com/", "status": "blocked_by_site", "httpStatus": 403, "error": "BLOCKED_BY_SITE (DataDome challenge page, HTTP 403): this actor does not bypass bot protection. Not charged."}

How much does it cost?

Free while in launch. The actor charges no fee of its own right now; you pay only the Apify platform usage of your runs (the free Apify plan includes $5 of usage a month). The price below is planned and applies only once it is switched on; Apify notifies existing users before a price change takes effect.

EventPlanned price
Page analysed (HTML page, HTTP 2xx)$0.002 (= $2 per 1,000 pages)

At the planned price, the default input (3 pages) would cost $0.006, and a 12-page crawl with 5 failed URLs (from our test on 2026-10-12) $0.024. Not charged: HTTP errors, redirects to errors, non-HTML files, pages blocked by bot protection or robots.txt, timeouts, invalid URLs. Once pricing is on, Maximum cost per run stops the run cleanly.

For comparison (Apify Store, checked 2026-10-12): the most-used SEO audit crawler charges $40 per 1,000 pages, a schema-markup scraper $5 per 1,000 and an on-page audit crawler $15 per 1,000.

How to use it

  1. Paste URLs into Page URLs (up to 10,000), one per line.
  2. To audit a whole site, enter its home page and set Pages per site (for example 500). Internal links are followed breadth-first; nofollow links and files such as PDFs and images are skipped.
  3. Press Start, then export CSV or Excel from the Output tab, or schedule the actor and connect Google Sheets, Slack or a webhook.

Input example

{
"urls": ["https://www.python.org/"],
"maxPagesPerSite": 200,
"maxPages": 1000,
"includeJsonLd": false
}

API example

curl -X POST "https://api.apify.com/v2/acts/adamhaleworks~seo-meta-tags-schema-extractor/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://apify.com/", "https://www.python.org/"]}'

Polite by design

  • One honest User-Agent: seo-meta-tags-schema-extractor/1.0 (+https://apify.com/<this actor>). No browser disguise, no proxy, no retry with a different identity.
  • robots.txt is read for every site (RFC 9309) and followed for our User-Agent token. A robots.txt that fails with a server error means nothing is fetched from that site.
  • At most 2 parallel requests per host. Retries use backoff and honour Retry-After up to 30 seconds. After an HTTP 429 or a bot-protection challenge, nothing more is sent to that host in the run.
  • Private and internal addresses are refused, including redirects to them.

Limitations

  • The HTML as served is analysed; content added later by JavaScript (client-side rendered titles or JSON-LD) is not seen.
  • Schema checks cover Google's most common rich-result types with their main properties; they are not a full validator like the Rich Results Test.
  • Sites behind bot protection that challenge non-browser clients are reported as blocked_by_site, not bypassed.

FAQ

Why is a page disallowed_by_robots_txt? The site's robots.txt does not allow it for crawlers (often User-agent: * with Disallow: /). Site owners can block or allow this actor by name with User-agent: seo-meta-tags-schema-extractor.

Does it follow redirects? Yes, up to 10 hops; the chain is in redirectChain and the analysed page in finalUrl.

Something is wrong or missing? Open an issue on the actor's Issues tab and include the URL.


Author: Adam Hale