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) Working with html/index.html, nextjs/metadata.ts, nextjs/dynamic-metadata-example.tsx, vite/index.html, vite/SEO.tsx, or vite/SEO.vue; (3) Adding SEO to a new page or route; (4) Migrating from react-helmet, vue-meta, or next-seo; (5) Generating dynamic metadata for content-driven pages; (6) Auditing metadata for completeness or best-practice compliance.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "seo-meta-tags" with this command: npx skills add jeremy0x/meta-tag-boilerplate/jeremy0x-meta-tag-boilerplate-seo-meta-tags

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

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Security

compliance-evidence-assembler

把审计所需证据整理成目录、清单和缺失项,便于后续评审。;use for compliance, evidence, audit workflows;do not use for 伪造证据, 替代正式审计结论.

Archived SourceRecently Updated
Security

skillguard-hardened

Security guard for OpenClaw skills, developed and maintained by rose北港(小红帽 / 猫猫帽帽). Audits installed or incoming skills with local rules plus Zenmux AI intent review, then recommends pass, warn, block, or quarantine.

Archived SourceRecently Updated
Security

api-contract-auditor

审查 API 文档、示例和字段定义是否一致,输出 breaking change 风险。;use for api, contract, audit workflows;do not use for 直接改线上接口, 替代契约测试平台.

Archived SourceRecently Updated
Security

ai-workflow-red-team-lite

对 AI 自动化流程做轻量红队演练,聚焦误用路径、边界失败和数据泄露风险。;use for red-team, ai, workflow workflows;do not use for 输出可直接滥用的攻击脚本, 帮助破坏系统.

Archived SourceRecently Updated