
Page Metadata
Tune hreflang, robots, viewport, and charset meta tags on live pages without redoing title, description, OG, or Twitter tags.
Overview
Page-metadata is an agent skill for the Launch phase that optimizes on-page meta tags beyond title, description, Open Graph, and Twitter Cards.
Install
npx skills add https://github.com/kostja94/marketing-skills --skill page-metadataWhat is this skill?
- Covers hreflang, meta robots, viewport, charset, and metadata completeness checks
- Routes title, description, Open Graph, and Twitter Cards to dedicated companion skills
- Reads .claude or .cursor project-context.md for language, locale, and indexing defaults
- First-use intro optional; subsequent runs can skip straight to actionable output
- On-page scope stays distinct from off-page link building or technical sitemap work
- Skill version 1.2.0 in SKILL.md metadata
- Explicitly defers four sibling tag skills: title-tag, meta-description, open-graph, twitter-cards
Adoption & trust: 772 installs on skills.sh; 586 GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You have core SEO tags handled but multilingual hreflang, robots directives, viewport, or charset are missing, wrong, or inconsistent across templates.
Who is it for?
Solo builders polishing production HTML or SSR templates before launch or after adding new locales.
Skip if: Teams that only need title tags, meta descriptions, or social preview cards—use the named companion skills instead.
When should I use this skill?
User wants meta tags other than title, description, OG, or Twitter Cards; mentions hreflang, meta robots, viewport, charset, canonical meta, or related phrases.
What do I get? / Deliverables
You get a structured optimization pass for hreflang, robots, viewport, charset, and completeness—with clear handoffs to title-tag, meta-description, open-graph, and twitter-cards where those tags still need work.
- Hreflang and robots recommendations per template or URL
- Viewport and charset fixes aligned with mobile and encoding needs
- Completeness notes pointing to title-tag and meta-description gaps
Recommended Skills
Journey fit
Launch-phase SEO shelf covers on-page signals beyond social preview tags—exactly where secondary meta tags affect crawl, locale, and mobile rendering. SEO subphase is the canonical home for page-level metadata completeness and crawler directives that sit next to titles and descriptions.
How it compares
Complements single-purpose title and social-card skills rather than replacing a full technical SEO audit or MCP crawling integration.
Common Questions / FAQ
Who is page-metadata for?
Solo and indie builders using Claude Code or Cursor who ship marketing sites or SaaS landing pages and need the "other" head tags correct for SEO and mobile.
When should I use page-metadata?
At Launch (SEO) when hreflang, meta robots, viewport, or charset come up; also during Grow content refreshes if you add locales; skip when the task is only titles, descriptions, or OG/Twitter previews.
Is page-metadata safe to install?
Treat it like any third-party agent skill: review the Security Audits panel on this Prism page and inspect SKILL.md in your repo before letting an agent edit production templates.
SKILL.md
READMESKILL.md - Page Metadata
# SEO On-Page: Metadata (Other Meta Tags) Guides optimization of meta tags beyond title, description, Open Graph, and Twitter Cards. Covers hreflang, robots, viewport, charset, and metadata completeness. **When invoking**: On **first use**, if helpful, open with 1–2 sentences on what this skill covers and why it matters, then provide the main output. On **subsequent use** or when the user asks to skip, go directly to the main output. ## Scope (On-Page SEO) - **Hreflang**: Language/region targeting for multilingual sites - **Meta robots**: index/noindex, follow/nofollow (page-level) - **Viewport**: Mobile responsiveness - **Charset**: Character encoding - **Metadata completeness**: All pages have title + meta description (see **title-tag**, **meta-description**) ## Initial Assessment **Check for project context first:** If `.claude/project-context.md` or `.cursor/project-context.md` exists, read it for language/locale and indexing goals. Identify: 1. **Multi-language**: zh, en, x-default if applicable 2. **Indexing**: Full index, noindex for specific pages 3. **Tech stack**: Next.js, HTML, etc. ## hreflang (Multi-language) **Three non-negotiables**: (1) Self-referencing tags (each page links to itself), (2) Symmetric annotations (every version lists ALL others), (3) Valid ISO 639-1 or language-region codes (`en`, `en-US`, `zh-CN`). **Implementation methods**: HTML `<link>` in head, XML sitemap (`xhtml:link`), or HTTP headers. For SPAs/JS-rendered pages, use sitemap-based hreflang as backup. See **rendering-strategies** for SSR/SSG/CSR. **Canonical alignment**: Canonical URL must match the same regional version hreflang refers to. Misalignment causes Google to ignore hreflang. **x-default**: Fallback for users whose language/location doesn't match any version. Point to default locale or language-selector page. ### Next.js (App Router) ```tsx export const metadata = { alternates: { languages: { 'en-US': '/en/page', 'zh-CN': '/zh/page', 'x-default': '/en/page', }, }, }; ``` ### HTML (generic) ```html <link rel="alternate" hreflang="en" href="https://example.com/en/page" /> <link rel="alternate" hreflang="zh" href="https://example.com/zh/page" /> <link rel="alternate" hreflang="x-default" href="https://example.com/en/page" /> ``` ### Common Mistakes (Avoid) - Missing reciprocal references between language versions. - Canonical tag conflicting with hreflang. - Relying solely on machine translation without localization (see **translation**). - Ignoring mobile—hreflang must appear on both desktop and mobile. - Forgetting to update hreflang when page structure changes. ## Meta Robots (Page-level) Page-level control for indexing and link following. See **indexing** for which page types typically need noindex. | Directive | Effect | |-----------|--------| | `noindex` | Exclude page from search results | | `nofollow` | Do not pass link equity through links on the page; **does NOT prevent indexing** | | `noindex,follow` | Exclude from SERP; allow crawlers to follow links (most common for thank-you, signup, legal) | | `noindex,nofollow` | Exclude + block link flow (login, staging, test pages) | **Crawl vs index vs link equity**: robots.txt = crawl control; noindex = index control; nofollow = link equity only. See **robots-txt**, **indexing**. ```html <meta name="robots" content="noindex, follow"> ``` Next.js: `metadata.robots = { index: false, foll