/meta-tags — Meta Tags & Social Preview Check
Checks whether all important meta tags for SEO and social media previews are set.
Checklist
Basic Meta (Required)
| # |
Tag |
Example |
| 1 |
<title> |
Page title — max 60 characters |
| 2 |
<meta name="description"> |
Description — max 155 characters |
| 3 |
<meta name="viewport"> |
width=device-width, initial-scale=1 |
| 4 |
<html lang="{{LANG}}"> |
Language attribute |
| 5 |
<link rel="canonical"> |
Canonical URL |
Open Graph (Recommended)
| # |
Tag |
Note |
| 6 |
og:title |
May differ from <title> |
| 7 |
og:description |
May differ from meta description |
| 8 |
og:image |
Min 1200x630px, absolute URL |
| 9 |
og:url |
Canonical URL |
| 10 |
og:type |
website or article |
| 11 |
og:site_name |
Website name |
Twitter Card (Recommended)
| # |
Tag |
Note |
| 12 |
twitter:card |
summary_large_image recommended |
| 13 |
twitter:title |
If different from og:title |
| 14 |
twitter:description |
If different |
| 15 |
twitter:image |
If different from og:image |
Structured Data (Optional, SEO Boost)
| # |
Check |
Note |
| 16 |
JSON-LD @type: WebSite |
On homepage |
| 17 |
JSON-LD @type: Organization |
Logo, name, URL |
| 18 |
JSON-LD @type: LocalBusiness |
For local businesses |
| 19 |
JSON-LD Breadcrumb |
For subpages |
Procedure
- Find layout/base template and read
<head>
- Spot-check individual pages (homepage + 1 subpage)
- Output checklist with status per tag
- For MISSING: provide correct markup as fix suggestion
Fix Template (Astro)
---
const { title, description, image } = Astro.props;
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
---
<title>{title}</title>
<meta name="description" content={description} />
<link rel="canonical" href={canonicalURL} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={image || '/og-default.png'} />
<meta property="og:url" content={canonicalURL} />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary_large_image" />
Structured Output (Optional)
When called in the context of /polish or /audit, additionally write/extend .micro-check-results.json:
{
"metaTagsCheck": {
"date": "YYYY-MM-DD",
"checks": [
{ "id": "META-01", "name": "title", "status": "ok|missing|too-long", "severity": "HIGH" },
{ "id": "META-02", "name": "description", "status": "ok|missing|too-long", "severity": "HIGH" },
{ "id": "META-03", "name": "viewport", "status": "ok|missing", "severity": "HIGH" },
{ "id": "META-04", "name": "lang", "status": "ok|missing", "severity": "MEDIUM" },
{ "id": "META-05", "name": "canonical", "status": "ok|missing", "severity": "MEDIUM" },
{ "id": "META-06", "name": "og:title", "status": "ok|missing", "severity": "MEDIUM" },
{ "id": "META-07", "name": "og:description", "status": "ok|missing", "severity": "MEDIUM" },
{ "id": "META-08", "name": "og:image", "status": "ok|missing", "severity": "MEDIUM" },
{ "id": "META-09", "name": "twitter:card", "status": "ok|missing", "severity": "LOW" },
{ "id": "META-10", "name": "structured-data", "status": "ok|missing", "severity": "LOW" }
],
"summary": { "ok": 7, "missing": 3 }
}
}
Rule: Only write when explicitly in the context of a parent skill. For standalone calls, text output only.
Rules
- Read-only — does not modify files except optional .micro-check-results.json
- Works with any web project
- OG image must be an absolute URL (not relative)
- Check length limits: title <=60, description <=155
1---2name: meta-tags3description: OG/Twitter/Structured Data meta tag check. Use when: "meta tags", "open graph", "og tags", "twitter card", "structured data", "seo meta".4---56<!-- AI-QUICK-REF7## /meta-tags — Quick Reference8- **Micro-skill** — Quick check, no workflow9- **Checks:** OG tags, Twitter Cards, Structured Data, basic meta10- **Output:** Checklist with OK/MISSING + correct markup11- **Recommended:** Before every launch, after content changes12-->1314# /meta-tags — Meta Tags & Social Preview Check1516Checks whether all important meta tags for SEO and social media previews are set.1718## Checklist1920### Basic Meta (Required)2122| # | Tag | Example |23|---|-----|---------|24| 1 | `<title>` | Page title — max 60 characters |25| 2 | `<meta name="description">` | Description — max 155 characters |26| 3 | `<meta name="viewport">` | `width=device-width, initial-scale=1` |27| 4 | `<html lang="{{LANG}}">` | Language attribute |28| 5 | `<link rel="canonical">` | Canonical URL |2930### Open Graph (Recommended)3132| # | Tag | Note |33|---|-----|------|34| 6 | `og:title` | May differ from `<title>` |35| 7 | `og:description` | May differ from meta description |36| 8 | `og:image` | Min 1200x630px, absolute URL |37| 9 | `og:url` | Canonical URL |38| 10 | `og:type` | `website` or `article` |39| 11 | `og:site_name` | Website name |4041### Twitter Card (Recommended)4243| # | Tag | Note |44|---|-----|------|45| 12 | `twitter:card` | `summary_large_image` recommended |46| 13 | `twitter:title` | If different from og:title |47| 14 | `twitter:description` | If different |48| 15 | `twitter:image` | If different from og:image |4950### Structured Data (Optional, SEO Boost)5152| # | Check | Note |53|---|-------|------|54| 16 | JSON-LD `@type: WebSite` | On homepage |55| 17 | JSON-LD `@type: Organization` | Logo, name, URL |56| 18 | JSON-LD `@type: LocalBusiness` | For local businesses |57| 19 | JSON-LD Breadcrumb | For subpages |5859## Procedure60611. Find layout/base template and read `<head>`622. Spot-check individual pages (homepage + 1 subpage)633. Output checklist with status per tag644. For MISSING: provide correct markup as fix suggestion6566## Fix Template (Astro)6768```astro69---70const { title, description, image } = Astro.props;71const canonicalURL = new URL(Astro.url.pathname, Astro.site);72---73<title>{title}</title>74<meta name="description" content={description} />75<link rel="canonical" href={canonicalURL} />76<meta property="og:title" content={title} />77<meta property="og:description" content={description} />78<meta property="og:image" content={image || '/og-default.png'} />79<meta property="og:url" content={canonicalURL} />80<meta property="og:type" content="website" />81<meta name="twitter:card" content="summary_large_image" />82```8384## Structured Output (Optional)8586When called in the context of `/polish` or `/audit`, additionally write/extend `.micro-check-results.json`:8788```json89{90 "metaTagsCheck": {91 "date": "YYYY-MM-DD",92 "checks": [93 { "id": "META-01", "name": "title", "status": "ok|missing|too-long", "severity": "HIGH" },94 { "id": "META-02", "name": "description", "status": "ok|missing|too-long", "severity": "HIGH" },95 { "id": "META-03", "name": "viewport", "status": "ok|missing", "severity": "HIGH" },96 { "id": "META-04", "name": "lang", "status": "ok|missing", "severity": "MEDIUM" },97 { "id": "META-05", "name": "canonical", "status": "ok|missing", "severity": "MEDIUM" },98 { "id": "META-06", "name": "og:title", "status": "ok|missing", "severity": "MEDIUM" },99 { "id": "META-07", "name": "og:description", "status": "ok|missing", "severity": "MEDIUM" },100 { "id": "META-08", "name": "og:image", "status": "ok|missing", "severity": "MEDIUM" },101 { "id": "META-09", "name": "twitter:card", "status": "ok|missing", "severity": "LOW" },102 { "id": "META-10", "name": "structured-data", "status": "ok|missing", "severity": "LOW" }103 ],104 "summary": { "ok": 7, "missing": 3 }105 }106}107```108109**Rule:** Only write when explicitly in the context of a parent skill. For standalone calls, text output only.110111## Rules112113- Read-only — does not modify files except optional .micro-check-results.json114- Works with any web project115- OG image must be an absolute URL (not relative)116- Check length limits: title <=60, description <=155