Skip to content
seo-meta-tags logo

SEO Meta Tags

seo-meta-tags

Comprehensive SEO and social metadata implementation for HTML, Next.js App Router, and Vite (React & Vue) projects. Use when: (1) Creating, editing, or reviewing meta tags, Open Graph, Twitter Cards, canonical/hreflang links, JSON-LD structured data, theme-color, or favicon/manifest config; (2) W...

SKILL.md

Full skill instructions

SEO Meta Tags

Boilerplate and component library for production-ready metadata across three framework targets.

Decision Tree

Determine the correct framework path first:

  1. Static HTML site or any-backend project — Read references/​html.md
  2. Next.js 13+ App Router — Read references/​nextjs.md
  3. Vite + React — Read references/​vite.md, React section
  4. Vite + Vue 3 — Read references/​vite.md, Vue section
  5. Multiple frameworks at once — Read all relevant reference files

Then determine action type:

  • Creating metadata from scratch? — Read matching reference → copy boilerplate → replace placeholders.
  • Updating existing metadata? — Load file → keep structure → change requested values → verify parity across tag families.
  • Auditing / reviewing metadata? — Run through Quality Gate below → report issues.
  • Migrating between frameworks? — Read source reference → read target reference → map fields.

Framework Selection

FrameworkWhen to useReference
HTMLStatic sites, any backend, SSGsreferences/​html.md
Next.jsNext.js 13+ App Router projectsreferences/​nextjs.md
ViteVite + React or Vite + Vue appsreferences/​vite.md

Read only the reference file that matches the user's target framework.

Metadata Families

Every framework target must keep parity across these families. When modifying one family, verify the others remain consistent.

1. Essential / Primary

TagConstraint
<title> / titleUnder 60 characters
description150-160 characters
keywords5-10 terms max, comma-separated
authorFull name
robotsindex, follow by default; include max-image-preview:large, max-snippet:-1, max-video-preview:-1
canonicalAbsolute URL, must match deployment URL
viewportwidth=device-width, initial-scale=1.0

2. Open Graph (og:*)

PropertyNotes
og:typewebsite for home/​landing; article for blog posts; product for e-commerce
og:urlAbsolute URL
og:titleCan differ from <title> for social context
og:descriptionCan differ from meta description
og:imageAbsolute URL, 1200x630px, JPG or PNG, under 1 MB
og:image:width / og:image:height1200 / 630
og:image:altRequired when image is present
og:site_nameBrand name
og:localee.g. en_US

For article type also include: article:published_time, article:modified_time, article:author, article:tag.

3. Twitter Cards (twitter:*)

PropertyNotes
twitter:cardsummary_large_image (default) or summary
twitter:siteOrganization handle with @ prefix
twitter:creatorAuthor handle with @ prefix
twitter:titleUnder 70 characters
twitter:descriptionUnder 200 characters
twitter:imageSame spec as OG image
twitter:image:altRequired when image is present

4. Theme Color

Provide three values:

  • Default: <meta name="theme-color" content="..."> or single value
  • Light: media="(prefers-color-scheme: light)"
  • Dark: media="(prefers-color-scheme: dark)"

Next.js uses the themeColor array in the Metadata object.

5. Icons and Manifest

AssetSizeFormat
favicon.ico32x32 or multi-sizeICO
icon-16x16.png16x16PNG
icon-32x32.png32x32PNG
apple-touch-icon.png180x180PNG
site.webmanifestn/​aJSON

Generate with favicon.io or RealFaviconGenerator.

6. Structured Data (JSON-LD)

Emit a <script type="application/​ld+json"> block (HTML/​Vite) or use a separate Script component in Next.js. Required keys:

{
	"@context": "https://schema.org",
	"@type": "WebSite",
	"name": "",
	"description": "",
	"url": "",
	"image": { "@type": "ImageObject", "url": "", "width": 1200, "height": 630 },
	"author": { "@type": "Person", "name": "" },
	"publisher": {
		"@type": "Organization",
		"name": "",
		"logo": { "@type": "ImageObject", "url": "" }
	}
}

Common @type values: WebSite, Article, Organization, Product, FAQPage, BreadcrumbList.

7. Internationalization (hreflang)

<link rel="alternate" hreflang="en" href="https://example.com/​en/" />
<link rel="alternate" hreflang="es" href="https://example.com/​es/" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />

Next.js equivalent: alternates.languages in the Metadata object.

8. Performance Hints

Include when external resources are used:

<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link rel="dns-prefetch" href="https://www.google-analytics.com" />

Placeholder Tokens

All boilerplate files use {{PLACEHOLDER_NAME}} tokens. Common tokens:

TokenPurpose
{{PAGE_TITLE}}Page <title>
{{PAGE_DESCRIPTION}}Meta description
{{PAGE_URL}}Page URL (absolute)
{{CANONICAL_URL}}Canonical URL
{{KEYWORDS}}Comma-separated keywords
{{AUTHOR_NAME}}Content author
{{SITE_NAME}}Brand / site name
{{THEME_COLOR}} / {{THEME_COLOR_LIGHT}} / {{THEME_COLOR_DARK}}Hex color codes
{{OG_TITLE}} / {{OG_DESCRIPTION}} / {{OG_IMAGE_URL}} / {{OG_IMAGE_ALT}}Open Graph
{{TWITTER_TITLE}} / {{TWITTER_DESCRIPTION}} / {{TWITTER_IMAGE_URL}} / {{TWITTER_IMAGE_ALT}}Twitter
{{TWITTER_HANDLE}} / {{TWITTER_CREATOR_HANDLE}}Twitter handles
{{SCHEMA_TYPE}} / {{SCHEMA_IMAGE_URL}}JSON-LD
{{PUBLISHER_NAME}} / {{PUBLISHER_LOGO_URL}}Publisher org
{{FAVICON_32x32_URL}} / {{FAVICON_16x16_URL}} / {{APPLE_TOUCH_ICON_URL}}Icons
{{AUTHOR_URL}}Author website URL (Next.js)
{{CREATOR_NAME}}Content creator name (Next.js)
{{CATEGORY}}Site category (Next.js)
{{GOOGLE_VERIFICATION_CODE}} / {{YANDEX_VERIFICATION_CODE}} / {{FACEBOOK_VERIFICATION_CODE}}Search engine verification codes (Next.js)
{{EN_URL}} / {{ES_URL}}Language-specific alternate URLs (Next.js)
{{ALTERNATE_EN_URL}} / {{ALTERNATE_DEFAULT_URL}}hreflang alternate URLs (HTML/​Vite)

When implementing for a user, replace every {{...}} token. Never leave placeholders in production output.

Quality Gate

Run these checks before considering any metadata task complete:

  1. No placeholders — grep for {{ in all modified files; count must be zero.
  2. Absolute URLs — canonical, OG url, OG image, Twitter image, JSON-LD url/​image must start with https://.
  3. Image alt text — every og:image / twitter:image must have a corresponding alt field.
  4. No duplicate tags — no two conflicting <title>, description, or canonical tags in the same scope.
  5. Title length — verify under 60 characters.
  6. Description length — verify 150-160 characters.
  7. JSON-LD validity — valid JSON with required @context and @type keys.
  8. OG/​Twitter parity — if OG title is set, Twitter title should also be set (and vice versa).
  9. Canonical consistency — canonical URL matches the actual page URL or intended redirect target.
  10. Theme color — includes both light and dark media variants.
  11. hreflang — includes x-default when language alternates exist.
  12. Robots — allows indexing unless user explicitly requests noindex.

Image Specifications

Use caseDimensionsRatioFormatMax size
OG / Twitter1200x6301.91:1JPG or PNG1 MB
Favicon 3232x321:1PNGn/​a
Favicon 1616x161:1PNGn/​a
Apple Touch180x1801:1PNGn/​a

Testing Tools

Recommend to users after deployment:

Common Mistakes

MistakeImpactFix
Relative URLs in og:image or twitter:imageSocial platforms can't fetch the imageAlways use absolute URLs starting with https://
Missing <HelmetProvider> in Vite ReactAll <SEO> tags silently fail to renderWrap app root in <HelmetProvider> in main.tsx
Missing createHead() in Vite VueuseHead() throws at runtimeCall app.use(createHead()) in main.ts
Committing verification codes to public reposExposes site ownership tokensUse environment variables for verification values
Duplicate <title> or description tagsCrawlers pick an unpredictable oneUse only one source of truth per scope (layout vs. page)
og:image set without og:image:altAccessibility failure, some validators warnAlways pair image with alt text
Using generateMetadata for static pagesUnnecessary async overhead on every requestUse static export const metadata when values are known at build time
Leaving {{...}} placeholder tokensBroken display on social platforms, poor SEOGrep for {{ before shipping
JSON-LD with trailing commas or commentsInvalid JSON, structured data ignoredValidate JSON before finishing
twitter:card set to summary when image is 1200x630Image gets cropped to tiny squareUse summary_large_image for landscape images

Migration Paths

FromToNotes
react-helmetVite React (SEO.tsx)Replace with react-helmet-async; wrap root in <HelmetProvider>
vue-metaVite Vue (SEO.vue)Replace metaInfo with @unhead/​vue useHead() composable
next-seoNext.js (metadata.ts)Remove <NextSeo>; use exported metadata or generateMetadata
Pages Router <Head>App RouterReplace import Head with export const metadata

More skills from diegosouzapw

accessibility logo
diegosouzapw/awesome-omni-skill

accessibility

Accessibility guidelines for VS Code features — covers accessibility help dialogs, accessible views, verbosity settings, accessibility signals, ARIA alerts/status announcements, keyboard navigation, and ARIA labels/roles. Applies to both new interactive UI surfaces and updates to existing feature...

62 1
View
mermaid-diagrams logo
diegosouzapw/awesome-omni-skill

mermaid-diagrams

Mermaid diagram creation for flowcharts, sequences, ERDs, and more. Generate diagrams from text in markdown files. Use for documentation, architecture diagrams, and visual representations. Triggers on mermaid, flowchart, sequence diagram, ERD, entity relationship, gantt chart, pie chart, class di...

62 1
View
tauri2-react-rust logo
diegosouzapw/awesome-omni-skill

tauri2-react-rust

Guides development of cross-platform desktop apps with Tauri 2, TypeScript, React, and Rust. Use when building Tauri apps, implementing IPC, designing Rust backend or TypeScript/React frontend, when researching or cloning a website (open site, snapshot elements), when verifying local dev or built...

62 1
View
fp-ts-errors logo
diegosouzapw/awesome-omni-skill

fp-ts-errors

Handle errors as values using fp-ts Either and TaskEither for cleaner, more predictable TypeScript code. Use when implementing error handling patterns with fp-ts.

62 0
View
ring:pre-dev-research logo
diegosouzapw/awesome-omni-skill

ring:pre-dev-research

Gate 0 research phase for pre-dev workflow. Dispatches 3 parallel research agents to gather codebase patterns, external best practices, and framework documentation BEFORE creating PRD/TRD. Outputs research.md with file:line references.

62 0
View
create-assistant logo
diegosouzapw/awesome-omni-skill

create-assistant

Create and configure Vapi voice AI assistants with models, voices, transcribers, tools, hooks, and advanced settings. Use when building voice agents, phone bots, customer support assistants, or any conversational AI that handles phone or web calls.

62 0
View
codex-headless logo
diegosouzapw/awesome-omni-skill

codex-headless

Delegiere Aufgaben an OpenAI Codex CLI im Headless-Mode. Nutzt ChatGPT Subscription (KEIN API Key). Nur Workspace-Zugriff, KEIN System-Zugriff. Auto-Accept mit --full-auto. Web-Recherche mit --search.

62 0
View
social-media-scheduler logo
diegosouzapw/awesome-omni-skill

social-media-scheduler

Generate a full week of social media content for any topic. Outputs platform-optimized posts for Twitter/X, LinkedIn, and Instagram with hashtags and posting times.

62 0
View
Data Privacy Compliance logo
diegosouzapw/awesome-omni-skill

Data Privacy Compliance

Data privacy and regulatory compliance specialist for GDPR, CCPA, HIPAA, and international data protection laws. Use when implementing privacy controls, conducting data protection impact assessments, ensuring regulatory compliance, or managing data subject rights. Expert in consent management, da...

62 0
View
triple-review logo
diegosouzapw/awesome-omni-skill

triple-review

Reviews a task using the TRIPLE protocol, as the review agent.

62 0
View
Tech Stack & Architecture Decision logo
diegosouzapw/awesome-omni-skill

Tech Stack & Architecture Decision

Define and document the technology stack and architecture decisions for a project. Use when the user needs to choose a tech stack, make architecture decisions, define infrastructure choices, or document technology selections. Triggers on requests like "define the tech stack", "choose technologies...

62 0
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View