MCPInstall

seo-meta

Generate complete SEO meta tags for every page. Covers title patterns, meta descriptions, Open Graph, Twitter Cards, and JSON-LD structured data (LocalBusiness, Service, FAQ, BreadcrumbList). Use when: building pages, adding social sharing, implementing structured data, optimizing for search engines.

Installs
539
Last 24h
—
Trending rank
—
Security
Not audited

Install

Works with every agent the skills CLI supports.

npx skills add https://github.com/jezweb/claude-skills --skill seo-meta
  1. 01

    Install

    Run the command in your project. The CLI asks which agents to install for.

  2. 02

    Describe the task

    Ask your agent for something this skill covers. It loads seo-meta automatically when relevant.

  3. 03

    Review the result

    The agent follows the SKILL.md steps, scripts and references bundled with the skill.

SKILL.md

The instructions your agent reads when the skill is triggered.

SEO Meta Tags

Status: Production Ready ✅ Last Updated: 2026-01-14 Source: Schema.org, Open Graph Protocol, Twitter Developer Docs


Quick Start

Every page needs:

<head>
  {/* Basic SEO */}
  <title>Service in Location | Brand Name</title>
  <meta name="description" content="Value prop. Differentiator. Call to action." />
  <link rel="canonical" href="https://example.com/page" />

  {/* Open Graph */}
  <meta property="og:title" content="Service in Location" />
  <meta property="og:description" content="Value prop. Differentiator. CTA." />
  <meta property="og:image" content="https://example.com/og-image.jpg" />
  <meta property="og:url" content="https://example.com/page" />
  <meta property="og:type" content="website" />

  {/* Twitter Card */}
  <meta name="twitter:card" content="summary_large_image" />
  <meta name="twitter:title" content="Service in Location" />
  <meta name="twitter:description" content="Value prop. Differentiator. CTA." />
  <meta name="twitter:image" content="https://example.com/og-image.jpg" />

  {/* JSON-LD Structured Data */}
  <script type="application/ld+json">
    {JSON.stringify({
      "@context": "https://schema.org",
      "@type": "LocalBusiness",
      "name": "Business Name",
      "description": "What we do",
      "@id": "https://example.com",
      "url": "https://example.com",
      "telephone": "+61-XXX-XXX-XXX",
      "address": {
        "@type": "PostalAddress",
        "streetAddress": "123 Main St",
        "addressLocality": "Sydney",
        "addressRegion": "NSW",
        "postalCode": "2000",
        "addressCountry": "AU"
      }
    })}
  </script>
</head>

Title Tag Patterns

Character Limits:

  • Google: 50-60 characters (desktop), 78 (mobile)
  • Social: 60-70 characters

Page Type Formulas:

Page TypePatternExample
Home[Brand] - [Primary Service] in [Location]Acme Plumbing - 24/7 Emergency Plumber Sydney
Service[Service] in [Location] | [Brand]Hot Water Repairs Sydney | Acme Plumbing
Location[Service] [Suburb] | [Brand]Plumber Bondi | Acme Plumbing
AboutAbout [Brand] - [Tagline/USP]About Acme - Licensed Plumbers Since 1995
ContactContact [Brand] - [Location] | [Phone]Contact Acme Plumbing - Sydney | 1300 XXX XXX

Title Modifiers (add credibility):

  • 24/7 Emergency
  • Licensed & Insured
  • Free Quotes
  • Same Day Service
  • Family Owned
  • Award Winning

Anti-Patterns (avoid):

  • ❌ "Welcome to..." (wastes characters)
  • ❌ Keyword stuffing (plumber plumbing plumbers)
  • ❌ ALL CAPS (looks spammy)
  • ❌ Special characters (★ § ¶)

Meta Description Patterns

Character Limits:

  • Desktop: 155-160 characters
  • Mobile: 120-130 characters

Formula:

[Value prop] [Service] in [Location]. [Differentiator]. [CTA].

Examples by Page Type:

Home Page:

Fast, reliable plumbing services in Sydney. 24/7 emergency response, licensed plumbers, upfront pricing. Call 1300 XXX XXX for same-day service.

Service Page:

Expert hot water repairs in Sydney. Fix or replace electric, gas & solar systems. Licensed technicians, 1-year warranty. Book online or call 1300 XXX XXX.

Location Page:

Trusted plumber in Bondi. Blocked drains, leaks, hot water, gas fitting. Same-day service, upfront quotes. Call your local plumber on 1300 XXX XXX.

Power Words (use sparingly):

  • Trust: Licensed, Certified, Insured, Guaranteed, Trusted
  • Speed: Fast, Quick, Same Day, Emergency, 24/7, Instant
  • Value: Affordable, Competitive, Upfront, No Hidden Fees, Free Quote
  • Local: Local, Nearby, Your Area, [Suburb Name]
  • Quality: Expert, Professional, Experienced, Award Winning

Open Graph Tags

Required Tags:

<meta property="og:title" content="Service in Location" />
<meta property="og:description" content="Value prop. Differentiator. CTA." />
<meta property="og:image" content="https://example.com/og-image.jpg" />
<meta property="og:url" content="https://example.com/page" />
<meta property="og:type" content="website" />

Image Requirements:

  • Dimensions: 1200x630px (1.91:1 ratio)
  • Format: JPG or PNG (JPG preferred for file size)
  • File size: <1MB (ideally <300KB)
  • Text overlay: Keep important text center (safe zone: 1000x530)

og:type Values by Page Type:

Page Typeog:type
Home, Service, Locationwebsite
Blog Postarticle
Business Profilebusiness.business

Optional but Recommended:

<meta property="og:site_name" content="Brand Name" />
<meta property="og:locale" content="en_AU" />

Twitter Cards

Card Types:

TypeUse Case
summarySmall square image (1:1), basic info
summary_large_imageLarge image (1.91:1), most common

Required Tags:

<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Service in Location" />
<meta name="twitter:description" content="Value prop. Differentiator. CTA." />
<meta name="twitter:image" content="https://example.com/og-image.jpg" />

Optional:

<meta name="twitter:site" content="@yourbrand" />
<meta name="twitter:creator" content="@authorhandle" />

Fallback Behavior:

  • If twitter:title missing, uses og:title
  • If twitter:description missing, uses og:description
  • If twitter:image missing, uses og:image

Best Practice: Define og:* tags first, only add twitter:* if values differ.


JSON-LD Structured Data

LocalBusiness Schema (Most Important)

Use for homepage and contact page:

{
  "@context": "https://schema.org",
  "@type": "Plumber",
  "name": "Acme Plumbing",
  "description": "Licensed plumbing services in Sydney",
  "@id": "https://acmeplumbing.com.au",
  "url": "https://acmeplumbing.com.au",
  "logo": "https://acmeplumbing.com.au/logo.png",
  "image": "https://acmeplumbing.com.au/og-image.jpg",
  "telephone": "+61-XXX-XXX-XXX",
  "email": "info@acmeplumbing.com.au",
  "priceRange": "$$",
  "address": {
    "@type": "PostalAddress",
    "streetAddress": "123 Main Street",
    "addressLocality": "Sydney",
    "addressRegion": "NSW",
    "postalCode": "2000",
    "addressCountry": "AU"
  },
  "geo": {
    "@type": "GeoCoordinates",
    "latitude": -33.8688,
    "longitude": 151.2093
  },
  "openingHoursSpecification": [
    {
      "@type": "OpeningHoursSpecification",
      "dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
      "opens": "07:00",
      "closes": "17:00"
    }
  ],
  "sameAs": [
    "https://facebook.com/acmeplumbing",
    "https://instagram.com/acmeplumbing"
  ]
}

Specific Business Types (instead of generic LocalBusiness):

  • Plumber, Electrician, Locksmith, HVAC (HVACBusiness)
  • Dentist, Attorney, Accountant
  • Restaurant, Cafe, FoodEstablishment
  • Store, AutoRepair, BeautySalon

Service Schema

Use for service pages:

{
  "@context": "https://schema.org",
  "@type": "Service",
  "name": "Hot Water Repairs",
  "description": "Fast hot water system repairs in Sydney",
  "provider": {
    "@type": "Plumber",
    "name": "Acme Plumbing",
    "url": "https://acmeplumbing.com.au"
  },
  "areaServed": {
    "@type": "City",
    "name": "Sydney"
  },
  "availableChannel": {
    "@type": "ServiceChannel",
    "serviceUrl": "https://acmeplumbing.com.au/hot-water-repairs",
    "servicePhone": "+61-XXX-XXX-XXX"
  }
}

FAQ Schema (Rich Snippets)

Use for FAQ sections:

{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [
    {
      "@type": "Question",
      "name": "How much does a plumber cost in Sydney?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Plumbing rates in Sydney typically range from $100-$150 per hour for standard work. Emergency callouts may incur higher rates. We provide upfront quotes before starting work."
      }
    },
    {
      "@type": "Question",
      "name": "Do you offer same-day service?",
      "acceptedAnswer": {
        "@type": "Answer",
        "text": "Yes, we offer same-day plumbing service across Sydney for urgent repairs. Call us before 2pm for same-day availability."
      }
    }
  ]
}

BreadcrumbList Schema

Use on all pages except homepage:

{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://acmeplumbing.com.au"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Services",
      "item": "https://acmeplumbing.com.au/services"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Hot Water Repairs",
      "item": "https://acmeplumbing.com.au/hot-water-repairs"
    }
  ]
}

Canonical URLs

When to Use:

  • Every page should have a self-referencing canonical
  • Duplicate content (pagination, filters, print versions)
  • Syndicated content
  • Cross-domain duplicates

Self-Referencing Canonical:

<!-- Always include, even if no duplicates -->
<link rel="canonical" href="https://example.com/page" />

Pagination:

<!-- On page 2+ -->
<link rel="canonical" href="https://example.com/services" />
<!-- Not https://example.com/services?page=2 -->

Common Mistakes:

  • ❌ Missing canonical (Google chooses for you)
  • ❌ Relative URLs (use absolute URLs)
  • ❌ Canonical pointing to different content
  • ❌ Multiple canonicals (only one per page)

Validation Tools

Check Your Implementation:

ToolPurposeURL
Google Rich Results TestTest structured datasearch.google.com/test/rich-results
Schema Markup ValidatorValidate JSON-LDvalidator.schema.org
Facebook DebuggerTest Open Graph tagsdevelopers.facebook.com/tools/debug
Twitter Card ValidatorTest Twitter Cardscards-dev.twitter.com/validator
Screaming FrogAudit all pagesscreamingfrog.co.uk/seo-spider

Browser Extensions:

  • SEO Meta in 1 Click (Chrome)
  • META SEO inspector (Firefox)

Quick Reference Checklist

For every page, include:

  • <title> (50-60 chars, unique per page)
  • <meta name="description"> (150-160 chars, unique per page)
  • <link rel="canonical"> (absolute URL)
  • Open Graph tags (og:title, og:description, og:image, og:url, og:type)
  • Twitter Card tags (twitter:card, twitter:title, twitter:description, twitter:image)
  • JSON-LD structured data (LocalBusiness on homepage, Service on service pages)
  • BreadcrumbList schema (all pages except homepage)
  • Mobile viewport meta tag
  • Charset meta tag (UTF-8)

Never:

  • ❌ Duplicate titles across pages
  • ❌ Use "Welcome to..." in titles
  • ❌ Omit og:image (critical for social sharing)
  • ❌ Use generic @type (LocalBusiness instead of Plumber)
  • ❌ Skip CTA in meta description

Error Prevention

Common Issues

IssueCauseFix
No rich snippets in searchInvalid JSON-LDUse validator.schema.org, check commas/quotes
Social share shows wrong imageog:image missing or wrong sizeUse 1200x630px, test with Facebook Debugger
Title truncated in searchToo longKeep under 60 chars
Description truncatedToo longKeep under 160 chars
Multiple pages rank for same keywordDuplicate titlesMake each title unique

Testing Workflow

  1. Validate HTML: Use W3C validator
  2. Test Structured Data: Google Rich Results Test
  3. Test Social Sharing: Facebook Debugger + Twitter Card Validator
  4. Mobile Preview: Google Search Console URL Inspection
  5. Cross-Browser Check: Test meta rendering in Chrome/Firefox/Safari

Best Practices Summary

Title Tags:

  • 50-60 characters maximum
  • Include primary keyword + location + brand
  • Unique for every page
  • Use modifiers (24/7, Licensed, Free) sparingly

Meta Descriptions:

  • 150-160 characters maximum
  • Include value prop + differentiator + CTA
  • Write for humans, not search engines
  • Every page needs unique description

Open Graph:

  • Always include og:image (1200x630px)
  • Use absolute URLs
  • Keep og:title under 60 chars
  • Test with Facebook Debugger before launch

JSON-LD:

  • Use specific @type (Plumber, not LocalBusiness)
  • Include all contact info (phone, address, email)
  • Add openingHoursSpecification for better display
  • Validate with schema.org validator

Canonical URLs:

  • Every page needs canonical
  • Always use absolute URLs
  • Self-referencing is good practice
  • Only one canonical per page

Production Notes:

  • Use react-helmet-async for React apps (SSR-safe)
  • Generate JSON-LD dynamically from CMS/database
  • Cache meta tag components for performance
  • Monitor Search Console for indexing issues
  • Update structured data when business details change

FAQ

What does the seo-meta skill do?

Generate complete SEO meta tags for every page. Covers title patterns, meta descriptions, Open Graph, Twitter Cards, and JSON-LD structured data (LocalBusiness, Service, FAQ, BreadcrumbList). Use when: building pages, adding social sharing, implementing structured data, optimizing for search engines.

How do I install seo-meta?

Run npx skills add https://github.com/jezweb/claude-skills --skill seo-meta in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/seo-meta/ (personal) or .claude/skills/seo-meta/ (project).

Which AI agents can use seo-meta?

Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.

Is seo-meta safe to install?

No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.

Who maintains seo-meta?

It is published by jezweb in jezweb/claude-skills. It has 539 recorded installs.

More from jezweb/claude-skills

View all →

shadcn-ui

jezweb/claude-skills

Install and configure shadcn/ui components for React projects. Guides component selection, installation order, dependency management, customisation with semantic tokens, and common UI recipes (forms, data tables, navigation, modals). Use after tailwind-theme-builder has set up the theme infrastructure, when adding components, building forms, creating data tables, or setting up navigation.

Frontend & Design3.6K installs

color-palette

jezweb/claude-skills

Generate complete, accessible colour palettes from a single brand hex. Produces 11-shade scale (50-950), semantic tokens, dark mode variants, Tailwind v4 CSS output, WCAG contrast checks. Use whenever the user supplies a brand hex and asks for a palette, mentions setting up a design system, wants Tailwind theme colours from a brand colour, or asks to check colour accessibility / contrast.

Frontend & Design3.2K installs

tailwind-theme-builder

jezweb/claude-skills

Set up Tailwind v4 + shadcn/ui themed UI with dark mode. Install deps, configure CSS variables via @theme inline, wire dark mode toggle, verify. Use whenever the user mentions Tailwind v4, setting up Tailwind theming, shadcn/ui colours, dark mode, or troubleshooting colours not working, tw-animate-css errors, @theme inline conflicts, @apply breaking after upgrade, or v3 → v4 migration issues.

Frontend & Design3.2K installs

wordpress-elementor

jezweb/claude-skills

Edit Elementor pages and manage templates on WordPress sites via browser automation (for visual / structural changes) or WP-CLI (for safe text replacements). Use whenever the user wants to edit an Elementor page, update text in Elementor widgets, apply or manage Elementor templates, or make content changes to pages built with the Elementor page builder.

ux-audit

jezweb/claude-skills

Walk through a live web app AS a real user to find usability + behavioural bugs that static reviews miss. REQUIRES proof of interaction (typing, clicking, sending, observing) before any verdict — a sweep that didn't interact terminates with verdict 'Incomplete'. Walks threads, exercises every element, runs the multi-pane stress matrix, visual polish sweep, component perfection checklist, automated a11y (axe-core), pragmatic performance budget (LCP/CLS/INP), scenario battery (11 scenarios), and stress recipes including the real-flavour data battery. Hard gates: console errors/warnings = 0, network 5xx = 0, layout collapse = 0, axe Critical/Serious = 0, perf budget green. Audit-the-audit meta-check rejects rushed reports. Each finding has reproduction steps, evidence path, and suspected code location. Trigger with 'ux audit', 'walkthrough', 'qa sweep', 'audit the app', 'dogfood this', 'check all pages', 'find what's broken', 'stress the UI'.

Frontend & Design2.8K installs

tailwind-v4-shadcn

jezweb/claude-skills

Set up Tailwind v4 with shadcn/ui using @theme inline pattern and CSS variable architecture. Four-step pattern: CSS variables, Tailwind mapping, base styles, automatic dark mode. Prevents 8 documented errors. Use when initializing React projects with Tailwind v4, or fixing colors not working, tw-animate-css errors, @theme inline dark mode conflicts, @apply breaking, v3 migration issues.

Frontend & Design2.6K installs

Popular marketing & seo skills

View category →

reddit-automation

flowkit-labs/skills

Find Reddit threads where people are genuinely asking for what you offer, then draft short, genuinely helpful replies — disclosing your affiliation honestly and naming your product only when it truly answers the question. Two moves: discovery — scan the right subreddits for real needs (recommendation asks, expressed pain, competitor mentions) and rank the few threads where you can actually help; drafting — write from real experience, respect each community's self-promo rules, and keep a human in the loop to review and post. This markets on Reddit the honest way: contribute value, disclose who you are, never astroturf. Distilled from the playbook behind doany.ai's Reddit agent. Triggers on "find reddit opportunities", "reddit marketing", "reddit automation", "reply on reddit for my product", "reddit community engagement", "reddit lead gen", or any ask to turn Reddit threads into genuine, disclosed marketing replies.

Marketing & SEO1.1M installs

twitter-automation

101-skills/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO880K installs

twitter-automation

magentosh/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO771.7K installs

twitter-automation

qu-skills/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO564.3K installs

product-launch-video

heygen-com/hyperframes

Turn a product or marketing URL, pasted script, or brief into a product launch / promo video — SaaS promos, feature reveals, product demos, app and company launches. Use when the user wants to market, launch, promote, or reveal a product; the default for any commercial URL. Site tours / showcases of a website route here too — the brief carries the show-it-as-is intent. Unclear → /hyperframes.

Marketing & SEO538.7K installs

twitter-automation

skills-shell/superpowers

Automate Twitter/X with posting, engagement, and user management via inference.sh CLI. Apps: x/post-tweet, x/post-create (with media), x/post-like, x/post-retweet, x/dm-send, x/user-follow. Capabilities: post tweets, schedule content, like posts, retweet, send DMs, follow users, get profiles. Use for: social media automation, content scheduling, engagement bots, audience growth, X API. Triggers: twitter api, x api, tweet automation, post to twitter, twitter bot, social media automation, x automation, tweet scheduler, twitter integration, post tweet, twitter post, x post, send tweet

Marketing & SEO453.7K installs