# Meta Tag & OpenGraph Scraper (`taroyamada/meta-tag-analyzer`) Actor

Audit meta tags, OpenGraph, SEO signals. No API key / no login. Open Input → leave defaults → Start (1 page ≈ USD 0.003/row): https://console.apify.com/actors/pRIbTQnVnGcacOLMv/input From USD 3/1k.

- **URL**: https://apify.com/taroyamada/meta-tag-analyzer.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** SEO tools, Developer tools, Marketing
- **Features:** Limited permissions
- **Stats:** 11 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 page metadata audits

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🏷️ Meta Tag Analyzer

**What you get:** one row per URL with the title, meta description, canonical, robots, viewport, charset, favicon, Open Graph and Twitter Card tags, hreflang links, JSON-LD blocks, and a list of SEO issues, billed at $0.003 per URL that loads (failed or blocked URLs are not charged).

Sample output from a real run (2026-10-18, the JSON below: github.com):

| url | title | canonical | og / twitter | hreflang | issues |
|---|---|---|---|---|---|
| https://github.com | GitHub · Change is constant. GitHub keeps you ahead. · GitHub · GitHub | https://github.com | og:image, og:title …; twitter:card summary_large_image | 8 | Title too long (70 chars, recommended max 60); Description too long (190 chars, recommended max 160) |

**CTA:** Open **Input** (link below) → leave defaults (1 page) → **Start**. First paid proof ≈ **USD 0.003/row**.
[Open Input (leave defaults → Start)](https://console.apify.com/actors/pRIbTQnVnGcacOLMv/input)
Paid first run ≈ **USD 0.003/row** (1 page). Keep reports, exports, and movement options off for the first run. Open Console Input (deep link above) and run this JSON.

```json
{
  "urls": [
    "https://github.com"
  ],
  "concurrency": 1,
  "dryRun": false
}
```

Paste URL and Start.

Extracting structured data and meta tags from arbitrary websites is essential for technical SEO audits, site migrations, and competitor analysis. This automation tool crawls web pages to accurately extract schema.org JSON-LD, Open Graph tags, Twitter cards, viewport configurations, and crucial robots directives from hundreds of URLs in seconds. Built for SEO professionals, data engineers, and developers, this web scraper replaces manual element inspection by programmatically reading exactly how search engines and social media platforms view your website content.

Schedule weekly scraper runs to continuously monitor your site's health. Catch truncated page titles, missing canonical links, broken social preview images, or accidental `noindex` directives before they negatively impact your search results. Whether you need to scrape product details embedded via schema markup, validate organization data, or extract contact details from competitor websites, this tool delivers highly structured, perfectly formatted data.

The output details exactly what a browser sees when loading your pages. Concrete extracted fields include full HTML head metadata, canonical URLs, charset configurations, structured JSON-LD payloads, meta descriptions, and custom tags. Use these scraped results to feed dashboards, integrate with internal reporting tools, or conduct bulk technical validation across vast domain portfolios.

### Store Quickstart

Start with the **Quickstart** template (3 demo URLs). For full SEO audits, use **SEO Audit** template with 50+ URLs. For ongoing social sharing validation, use **Open Graph Monitor**.

### Use with Apify MCP

Exact actor: `taroyamada/meta-tag-analyzer`

Sample input JSON:

```json
{
  "urls": [
    "https://github.com"
  ],
  "concurrency": 3
}
```

### Key Features

- 🏷️ **All meta tags extracted** — Title, description, keywords, canonical, robots, viewport, charset
- 📱 **Open Graph parsed** — og:title, og:image, og:description, og:type, og:url and more
- 🐦 **Twitter Card detected** — twitter:card, twitter:image, twitter:creator, twitter:site
- 🌍 **Hreflang inspected** — Multi-language alternate links for international SEO
- 🧩 **JSON-LD structured data** — Schema.org types detected (Article, Product, Organization, etc.)
- ⚠️ **Issues flagged** — Missing canonical, truncated titles, missing OG image, hreflang errors

### Use Cases

| Who | Why |
|-----|-----|
| **SEO specialists** | Audit title/meta tags for length, missing canonical, duplicate content |
| **Social media managers** | Verify Open Graph images render correctly on Facebook/LinkedIn |
| **International teams** | Validate hreflang tags on multilingual sites |
| **Content marketers** | Ensure Twitter Cards display properly when content is shared |
| **Schema.org auditors** | Detect missing or malformed structured data on product pages |

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| urls | string\[] | (required) | URLs to analyze (max 500) |
| concurrency | integer | 10 | Parallel requests (1-10) |

#### Input Example

```json
{
  "urls": ["https://example.com/product/1", "https://example.com/blog/post-1"],
  "concurrency": 10
}
```

### Input Examples

#### Example: Single URL audit

```json
{
  "urls": [
    "https://github.com"
  ]
}
```

#### Example: Small batch

```json
{
  "urls": [
    "https://github.com",
    "https://news.ycombinator.com",
    "https://www.wikipedia.org"
  ],
  "concurrency": 3
}
```

#### Example: Slow sites with a longer timeout

```json
{
  "urls": [
    "https://www.example.com"
  ],
  "timeoutMs": 20000
}
```

### Output

| Field | Type | Description |
|-------|------|-------------|
| `url` | string | Page URL analyzed |
| `title` | string | Contents of <title> tag |
| `description` | string | Meta description content |
| `canonical` | string | Canonical URL if specified |
| `ogTitle` | string | Open Graph title |
| `ogDescription` | string | Open Graph description |
| `ogImage` | string | Open Graph image URL |
| `twitterCard` | string | Twitter card type |
| `twitterTitle` | string | Twitter card title |
| `robots` | string | Robots meta directive |
| `lang` | string | HTML lang attribute |

#### Output Example

```json
{
  "url": "https://example.com/product/1",
  "title": "Premium Widget — Example Store",
  "description": "Buy the best widget...",
  "canonical": "https://example.com/product/1",
  "og": {"title": "Premium Widget", "image": "https://example.com/widget.jpg", "type": "product"},
  "twitter": {"card": "summary_large_image"},
  "hreflang": [{"lang": "en-us", "href": "..."}],
  "jsonLd": [{"@type": "Product", "name": "Premium Widget"}],
  "issues": []
}
```

### API Usage

Run this actor programmatically using the Apify API. Replace `YOUR_API_TOKEN` with your token from [Apify Console → Settings → Integrations](https://console.apify.com/account/integrations).

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/taroyamada~meta-tag-analyzer/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "urls": ["https://example.com/product/1", "https://example.com/blog/post-1"], "concurrency": 10 }'
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("taroyamada/meta-tag-analyzer").call(run_input={
  "urls": ["https://example.com/product/1", "https://example.com/blog/post-1"],
  "concurrency": 10
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

#### JavaScript / Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('taroyamada/meta-tag-analyzer').call({
  "urls": ["https://example.com/product/1", "https://example.com/blog/post-1"],
  "concurrency": 10
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Tips & Limitations

- Use this to audit social sharing previews before launching a campaign.
- Check `canonical` to detect duplicate content issues across your site.
- Run monthly to catch accidental robots noindex tags after deploys.
- Pair with Article Content Extractor for full content + metadata analysis.

### FAQ

**Which meta tags are most important for SEO?**

title, description, canonical, and robots are critical. og:image matters for social shares. hreflang matters if you have multilingual content.

**Can it follow redirects?**

Yes. Meta tags are extracted from the final URL after redirects.

**Does it render JavaScript?**

No. Tags are extracted from initial HTML only. If your site renders tags client-side, this actor won't see them.

**What issues are flagged?**

Truncated titles (>60 chars), missing description, missing canonical, missing og:image, duplicate meta description.

**Does it render JavaScript?**

No — it parses raw HTML. Tags injected by client-side JS won't be captured.

**Can I extract structured data (JSON-LD)?**

Basic Open Graph and Twitter Card metadata only. JSON-LD parsing is on the roadmap.

### Complete Your Website Health Audit

**Website Health Suite** — Build a comprehensive compliance and trust monitoring workflow:

**1. Link & URL Health**

- [🔗 Broken Link Checker](https://apify.com/taroyamada/broken-link-checker) — Find broken links across your entire site structure
- [🔗 Bulk URL Health Checker](https://apify.com/taroyamada/bulk-url-health-checker) — Validate HTTP status, redirects, SSL, and response times

**2. SEO & Metadata Quality** (you are here)

- [🏷️ Meta Tag Analyzer](https://apify.com/taroyamada/meta-tag-analyzer) — Audit title tags, Open Graph, Twitter Cards, and hreflang
- [Schema.org Validator](https://apify.com/taroyamada/structured-data-validator) — Validate JSON-LD and Microdata with quality scoring

**3. Security & Email Deliverability**

- [DNS/DMARC Security Checker](https://apify.com/taroyamada/dns-dmarc-security-checker) — Audit SPF, DKIM, DMARC, and MX records

**4. Historical Data & Recovery**

- [📚 Wayback Machine Checker](https://apify.com/taroyamada/wayback-machine-checker) — Find archived snapshots for content recovery

**Recommended workflow**: Weekly meta tag audit → Fix truncated titles and missing OG images → Validate structured data with Schema Validator → Monitor canonical tags → Track social sharing performance.

**Other Website Tools:**

- [Sitemap Analyzer](https://apify.com/taroyamada/sitemap-analyzer) — SEO sitemap audit
- [Site Governance Monitor](https://apify.com/taroyamada/site-governance-monitor) — Robots.txt and schema monitoring
- [Domain Trust Monitor](https://apify.com/taroyamada/domain-trust-monitor) — SSL expiry and security headers

### Cost

**Pay Per Event**:

- `Page metadata audit`: $0.003 per delivered result row (one per URL that loaded). No start fee.

**Example**: 1,000 URLs that load = 1,000 × $0.003 = **$3.00**

**Failed URLs are not charged**: a URL that cannot be fetched (network error, timeout) or that answers with HTTP 4xx/5xx (blocked, not found, server error) is not written to the dataset and not charged. It is listed in the `FAILED_ROWS` record of the run's key-value store, and the run's status message says how many URLs failed.

No subscription required — you only pay for what you use.

### ⭐ Was this helpful?

If this actor saved you time, please [**leave a ★ rating**](https://apify.com/taroyamada/meta-tag-analyzer/reviews) on Apify Store. It takes 10 seconds, helps other developers discover it, and keeps updates free.

Bug report or feature request? Open an issue on the [Issues tab](https://apify.com/taroyamada/meta-tag-analyzer/issues) of this actor.

### Related Actors

- Hub: [`taroyamada/article-content-extractor`](https://apify.com/taroyamada/article-content-extractor)
- [`taroyamada/article-content-extractor`](https://apify.com/taroyamada/article-content-extractor)
- [`taroyamada/website-content-extractor`](https://apify.com/taroyamada/website-content-extractor)
- [`taroyamada/rss-feed-aggregator`](https://apify.com/taroyamada/rss-feed-aggregator)
- [`taroyamada/google-news-scraper`](https://apify.com/taroyamada/google-news-scraper)
- [`taroyamada/broken-link-checker`](https://apify.com/taroyamada/broken-link-checker)

# Actor input Schema

## `urls` (type: `array`):

Leave the two prefilled URLs and click Start for the first run (≈ $0.006). Do not clear — empty fails validation (required). Or paste up to 500 public page URLs.

## `concurrency` (type: `integer`):

Number of parallel requests

## `timeoutMs` (type: `integer`):

Request timeout in milliseconds

## `delivery` (type: `string`):

Where to send results: dataset or webhook. Start with dataset for reviewable output.

## `webhookUrl` (type: `string`):

Webhook URL to POST results to when delivery=webhook. Leave empty for dataset-only first runs.

## `dryRun` (type: `boolean`):

Run without saving results (for testing)

## Actor input object example

```json
{
  "urls": [
    "https://github.com"
  ],
  "concurrency": 1,
  "timeoutMs": 10000,
  "delivery": "dataset",
  "dryRun": false
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://github.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/meta-tag-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://github.com"] }

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/meta-tag-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://github.com"
  ]
}' |
apify call taroyamada/meta-tag-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,taroyamada/meta-tag-analyzer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/pRIbTQnVnGcacOLMv/builds/TZVL9netL8LdGf7Pn/openapi.json
