Agent skill

Nuxt SEO Utils

by harlan-zw in harlan-zw/nuxt-seo-utils

Set up, override, and debug the default SEO head tags in a Nuxt app with the nuxt-seo-utils module.

MITAuto-check passedMedia & Creative

Install Nuxt SEO Utils

skills CLI
$ npx skills add harlan-zw/nuxt-seo-utils --skill nuxt-seo-utils -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install harlan-zw/nuxt-seo-utils nuxt-seo-utils --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/harlan-zw/nuxt-seo-utils.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/nuxt-seo-utils .claude/skills/nuxt-seo-utils && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
nuxt-seo-utils
GitHub stars
130
Token cost
~2.1k tokens
SKILL.md length
919 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Set up, override, and debug the default SEO head tags in a Nuxt app with the nuxt-seo-utils module.

  • A task mentions canonical URLs
  • SKILL.md covers Setup, Automatic behaviour, Metadata files and Site-wide and per-route meta, plus 6 more sections
  • Calls pnpm
  • The title template

What it does

Nuxt SEO Utils is an agent skill from harlan-zw/nuxt-seo-utils. Set up, override, and debug the default SEO head tags in a Nuxt app with the nuxt-seo-utils module. Use when a task mentions canonical URLs, the title template or separator, fallback titles, og:image or twitter:image files, favicons and app icons, seo.meta, seoMeta or head in routeRules, useBreadcrumbItems, useShareLinks, the nuxt-seo-utils icons CLI, or the seo config key. Also use when a page tag does not override a default, html lang ignores useHead, or og:image renders twice.

Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Media & Creative, covering Social media graphics. It works with Nuxt and X (Twitter). The repository describes itself as: SEO utilities to improve your Nuxt sites discoverability and shareability. The licence is MIT.

When your agent uses it

  • A task mentions canonical URLs
  • The title template
  • Fallback titles
  • Twitter:image files

Example prompts

  • “/nuxt-seo-utils”

What it can do on your machine

Read from SKILL.md and the folder at commit 3644935. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • pnpm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • nuxtseo.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Nuxt SEO Utils loads about 2.1k tokens when it runs. Until then it costs about 125 tokens; SKILL.md has 919 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~125
When it runs · the whole SKILL.md, loaded when a task matches
~2.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from harlan-zw/nuxt-seo-utils at commit 3644935, republished under its MIT licence (© harlan-zw). 919 words, ~2,148 tokens.

Download SKILL.mdSave it as .claude/skills/nuxt-seo-utils/SKILL.md (or your agent's skills folder).
name
nuxt-seo-utils
description
Set up, override, and debug the default SEO head tags in a Nuxt app with the nuxt-seo-utils module. Use when a task mentions canonical URLs, the title template or separator, fallback titles, og:image or twitter:image files, favicons and app icons, seo.meta, seoMeta or head in routeRules, useBreadcrumbItems, useShareLinks, the nuxt-seo-utils icons CLI, or the seo config key. Also use when a page tag does not override a default, html lang ignores useHead, or og:image renders twice.

nuxt-seo-utils

Requires Nuxt ^4.6.0 || ^5.0.0 and Unhead 3.4.2 or newer. The module adds default head tags from site config, reads icon and social image files, and ships breadcrumb and share link composables. Docs: https://nuxtseo.com/docs/seo-utils

Setup

The config key is seo. seoUtils does nothing. Set site.url and site.name. The canonical URL, og:url, the title template, and absolute image URLs read them.

ts
export default defineNuxtConfig({
  modules: ['nuxt-seo-utils'],
  site: { url: 'https://example.com', name: 'Acme', description: 'Default description', twitter: 'acme', defaultLocale: 'en-US' },
})

Crawlers read only the SSR response. The defaults render on the server.

Automatic behaviour

With the defaults, every page gets:

  • <title> from the template %s %separator %siteName. The separator is |. Change it with site.separator.
  • A fallback title from the last path segment, title cased: /blog/my-post becomes My Post. definePageMeta({ title }) sets it with a static string.
  • <link rel="canonical"> from site.url and the route path, lowercased, with only these query keys kept: page, sort, filter, search, q, category, tag.
  • og:url (the resolved canonical, including one a page sets), og:type (website), og:site_name (site.name), and description from site.description.
  • og:title, og:description, and twitter:card (summary_large_image), inferred from the title and description.
  • twitter:site and twitter:creator from site.twitter. The @ is added.
  • <html lang> from site.currentLocale or site.defaultLocale, else en.
  • og:locale only when the locale has a region. en-US renders en_US. en renders no tag.
  • Relative og:image and twitter:image values become absolute against site.url.

Module tags use tagPriority: 'low', so a page useSeoMeta() or useHead() call replaces them. A page ogImage also drops the default image's width, height, type, and copied twitter:image. A page ogImageAlt alone keeps the default image. A page canonical needs no extra priority:

ts
useHead({ link: [{ rel: 'canonical', href: 'https://example.com/preferred' }] })

Set seo: { automaticDefaults: false } to drop the canonical, title template, lang, and Open Graph defaults together. No option drops only one of them.

Metadata files

Files in public/ become site-wide head tags at build time:

  • favicon.{ico,png,svg}, icon*.{ico,png,jpg,svg}, apple-icon*.png, apple-touch-icon*.png: <link rel="icon"> or apple-touch-icon, with type and sizes read from the file.
  • og-image.{png,jpg,jpeg,gif} or opengraph-image.*: og:image with width, height, and type. It also fills twitter:image when no twitter-image.* file exists. The name must match exactly; blog-og-image.png is ignored.
  • <name>.alt.txt next to an image sets og:image:alt.
  • -dark or -light in an icon name adds a prefers-color-scheme media query.

The same file names inside pages/<route>/ or pages/<route>/_dir/ apply to that route and its children. They replace a public/ image there. An icon link in app.head.link with the same rel wins over the files. Set seo: { metaDataFiles: false } to turn this off.

Generate icon files from one source image in public/:

bash
pnpm exec nuxt-seo-utils icons --source logo.svg

It writes favicon.ico, apple-touch-icon.png, and icon-{16,32,192,512} PNGs to public/. Install the optional peer with pnpm add -D sharp before generating icons.

Site-wide and per-route meta

seo.meta takes useSeoMeta() input and renders on every page:

ts
export default defineNuxtConfig({
  seo: { meta: { author: 'Acme Team', themeColor: '#18181b' } },
})

routeRules accept seoMeta and head:

ts
export default defineNuxtConfig({
  routeRules: {
    '/blog/**': { seoMeta: { author: 'Blog Team' }, head: { meta: [{ name: 'x-section', content: 'blog' }] } },
  },
})

Route rule tags override seo.meta and app.head. A page useSeoMeta() or useHead() call overrides them. The tagPriority option does not change this. Route rule tags render on the server only. They do not update on client navigation.

Breadcrumbs

useBreadcrumbItems() is auto-imported. It returns a ref of items from the route path, ready for Nuxt UI <UBreadcrumb :items>.

ts
const items = useBreadcrumbItems({
  overrides: [undefined, undefined, { label: post.value.title }], // index matches the path segment; false removes it
})
  • With nuxt-schema-org installed, it also adds a BreadcrumbList node. Without it, no JSON-LD renders and there is no warning.
  • Labels come from definePageMeta({ breadcrumb: { label } }), then title in page meta, then the title-cased segment. The index route is Home.
  • Call it in the page component, not the layout. The page has the data for the last items. Calls in parent components with the same id merge their options.
Show full SKILL.md (359 more words)Show less
ts
const share = useShareLinks({ title: post.value.title, utm: { source: 'auto', campaign: 'launch' } })
// share.value.twitter, .facebook, .linkedin, .whatsapp, .telegram, .reddit, .pinterest, .email, .canonicalUrl

title defaults to site.name, not the page title. Pass it. UTM defaults to utm_source=<platform> and utm_medium=social (or email). An object without source: 'auto' switches to manual mode: { campaign: 'launch' } sends only utm_campaign.

Traps

  • htmlAttrs.lang in useHead() or app.head is ignored. The module sets lang from site config. Set site.defaultLocale, or use @nuxtjs/i18n.
  • Before nuxt-schema-org 6.4.1, the Schema.org WebPage URL keeps the route case. canonicalLowercase lowercases the canonical, og:url, useShareLinks() URLs, and BreadcrumbList item URLs. nuxt-schema-org before 6.4.1 builds the WebPage url from the route path. There, /blog/My-Post gets a canonical of /blog/my-post and a WebPage URL of /blog/My-Post. From 6.4.1, the WebPage url follows the canonical. On an older version, upgrade nuxt-schema-org, use lowercase route paths, or set canonicalLowercase: false. Breadcrumb to links keep their case on purpose.
  • definePageMeta({ title }) takes a static string only. Use useSeoMeta({ title }) for data.

Version limits

  • 8.5.2 and earlier: a page ogImage keeps the default image's dimensions and twitter:image, a page canonical leaves og:url on the route URL, a pages/<route>/og-image.png renders og:image:alt twice, and public/opengraph-image.* is ignored.
  • 8.5.2 and earlier: BreadcrumbList item URLs keep the route case, and useShareLinks() lowercases without the site locale.
  • 8.5.2 and earlier: seo.meta and public/og-image.png beat route rule seoMeta and pages/**/og-image.png. Put the route value in the page with useSeoMeta().
  • treeShakeUseSeoMeta needs Unhead v3. On Unhead v2 the module skips it with a warning.
  • automaticTwitterTags: false (removes twitter:card) arrived in 8.5.0.

Config

  • redirectToCanonicalSiteUrl (false): in production, send a 301 from other hosts to the site.url host.
  • canonicalQueryWhitelist: replaces the default list. It does not extend it.
  • minify ({ build: true, runtime: false }): minify static app.head JavaScript/CSS with parser-based tooling. Compact JSON/CSS in prerendered HTML. runtime: true compacts JSON/CSS per SSR request. Dynamic JavaScript and custom script types remain unchanged.
  • automaticOgAndTwitterTags (true): the og:title, og:description, and twitter:card inference.
  • Other options: https://nuxtseo.com/docs/seo-utils/api/config

Debug

  • On nuxt dev and nuxt build, the module warns about conflicts in app.head, such as a static lang or an og:site_name that differs from site.name. Fix the site config, not the head. Set validateAppHead: false to hide the check.
  • /__nuxt-seo-utils/debug.json in dev, or in production with seo: { debug: true }.
  • Nuxt DevTools has an SEO Utils tab.

© harlan-zw, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills/nuxt-seo-utils of harlan-zw/nuxt-seo-utils.

Open the folder on GitHubat commit 3644935

Compare with similar skills

Nuxt SEO Utils next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Nuxt SEO Utils compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Nuxt SEO Utils this skillharlan-zw/nuxt-seo-utils130—~2.1kAutomated safety check: PassMIT
Ccfddl X Postsccfddl/ccf-deadlines9.4k—~5.6kAutomated safety check: PassMIT
Web Asset Generatoralonw0/web-asset-generator5141 repos~6.6kAutomated safety check: PassMIT
Banner CreatorReScienceLab/opc-skills1.8k—~1.3kAutomated safety check: PassApache-2.0
Generate Brand Assetscrafter-station/skills112—~1.3kAutomated safety check: PassMIT
Open Graphkostja94/marketing-skills1k—~1.3kAutomated safety check: PassMIT

Similar skills

  • Ccfddl X Posts

    ccfddl/ccf-deadlines

    Prepare and, with a verified authenticated publishing route and authorization, publish daily conference-deadline countdown posts for @ccfddl on X/Twitter.

    9.4k GitHub stars~5.6k tokensUpdated today
    Media & CreativeAuto-check passed
  • Web Asset Generator

    alonw0/web-asset-generator

    Generate web assets including favicons, app icons (PWA), and social media meta images (Open Graph) for Facebook, Twitter, WhatsApp, and LinkedIn.

    514 GitHub starsUsed in 1 repo~6.6k tokens
    Media & CreativeAuto-check passed
  • Banner Creator

    ReScienceLab/opc-skills

    Create banners using AI image generation. An agent skill from ReScienceLab/opc-skills.

    1.8k GitHub stars~1.3k tokensUpdated yesterday
    Media & CreativeAuto-check passed
  • Generate Brand Assets

    crafter-station/skills

    Generate OG images and favicon based on project branding. An agent skill from crafter-station/skills.

    112 GitHub stars~1.3k tokensUpdated 1 mo ago
    Media & CreativeAuto-check passed
  • Open Graph

    kostja94/marketing-skills

    When the user wants to add, audit, implement, or optimize Open Graph metadata for social sharing, including og:title, og:description, og:image, og:url, Facebook previews, LinkedIn previews, or…

    1k GitHub stars~1.3k tokensUpdated 5 days ago
    Media & CreativeAuto-check passed
  • Nuxt Og Image Skilld

    harlan-zw/requestindexing.com

    ALWAYS use when writing code importing "nuxt-og-image". An agent skill from harlan-zw/requestindexing.com.

    396 GitHub stars~2.4k tokensUpdated today
    Media & CreativeAuto-check passed

Works with

Questions about Nuxt SEO Utils

What does Nuxt SEO Utils do?

Set up, override, and debug the default SEO head tags in a Nuxt app with the nuxt-seo-utils module. Nuxt SEO Utils is an agent skill from harlan-zw/nuxt-seo-utils. Set up, override, and debug the default SEO head tags in a Nuxt app with the nuxt-seo-utils module.

When should I use Nuxt SEO Utils?

Nuxt SEO Utils fits situations like: A task mentions canonical URLs; the title template; fallback titles; twitter:image files.

How do I install Nuxt SEO Utils in Claude Code?

Run `npx skills add harlan-zw/nuxt-seo-utils --skill nuxt-seo-utils -a claude-code`. Or copy the skill folder (skills/nuxt-seo-utils in harlan-zw/nuxt-seo-utils) into .claude/skills/nuxt-seo-utils in your project. Claude Code loads it when a task matches its description.

How do I install Nuxt SEO Utils in Codex?

Run `npx skills add harlan-zw/nuxt-seo-utils --skill nuxt-seo-utils -a codex`. Or copy the skill folder (skills/nuxt-seo-utils in harlan-zw/nuxt-seo-utils) into .agents/skills/nuxt-seo-utils in your project. Codex loads it when a task matches its description.

Can I use Nuxt SEO Utils in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add harlan-zw/nuxt-seo-utils --skill nuxt-seo-utils -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/nuxt-seo-utils, .gemini/skills/nuxt-seo-utils, .github/skills/nuxt-seo-utils and .opencode/skills/nuxt-seo-utils in your project.

What does Nuxt SEO Utils need to run?

Going by SKILL.md and its folder, Nuxt SEO Utils needs the command-line tools its instructions call (pnpm).

Does Nuxt SEO Utils access the network?

SKILL.md names 1 domain. As links in the text: nuxtseo.com. This is read from the text; nothing was executed.

Is Nuxt SEO Utils safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Nuxt SEO Utils use?

Nuxt SEO Utils is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Nuxt SEO Utils use?

About 2.1k tokens (SKILL.md is roughly 8.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Nuxt SEO Utils?

Skills that share tags, products or a category with Nuxt SEO Utils: Ccfddl X Posts (ccfddl/ccf-deadlines, 9.4k stars), Web Asset Generator (alonw0/web-asset-generator, 514 stars), Banner Creator (ReScienceLab/opc-skills, 1.8k stars) and Generate Brand Assets (crafter-station/skills, 112 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Nuxt SEO Utils?

harlan-zw (a GitHub user) maintains it in harlan-zw/nuxt-seo-utils, which has 130 GitHub stars. The repository was last updated on October 8, 2026.

Source: harlan-zw/nuxt-seo-utils on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.