Tools that help AI assistants add SEO to your Nuxt pages. These require a Pro API key.
Extract meta tags from rendered HTML output (not source code). This tool shows what actually renders, including meta from plugins, config, and middleware.
analyze_page (Vue) or analyze_content_page (Markdown).| Parameter | Type | Description |
|---|---|---|
url | string | URL to fetch and extract meta tags from |
html | string | Raw HTML to extract from (for local dev servers) |
Provide either url or html, not both.
// From live URL
extract_meta_tags({
url: 'https://nuxtseo.com/docs/sitemap/getting-started'
})
// From local dev server
// First fetch the rendered HTML:
// curl http://localhost:3000/my-page > page.html
extract_meta_tags({
html: '<html><head><title>My Page</title>...</head>...</html>'
})
Returns extracted Unhead input:
{
"url": "https://nuxtseo.com/docs/sitemap/getting-started",
"title": "Getting Started with Nuxt Sitemap",
"meta": [
{ "name": "description", "content": "Generate a sitemap for your Nuxt app..." },
{ "property": "og:title", "content": "Getting Started with Nuxt Sitemap" }
],
"link": [
{ "rel": "canonical", "href": "https://nuxtseo.com/docs/sitemap/getting-started" }
],
"script": [
{ "type": "application/ld+json", "innerHTML": "..." }
]
}
@nuxtjs/seo is adding expected tags$fetch('http://localhost:3000') to test before deployAnalyze a Vue file for SEO. Detects page type, existing SEO calls, and returns prioritized suggestions. Detects installed modules to avoid suggesting what's already handled.
| Parameter | Type | Description |
|---|---|---|
filePath | string | Path to Vue file (e.g., pages/about.vue) |
fileContent | string | Content of the Vue file |
nuxtConfig | string | nuxt.config.ts content (optional, for module detection) |
analyze_page({
filePath: 'pages/blog/[slug].vue',
fileContent: '...',
nuxtConfig: '...'
})
Returns:
{
"filePath": "pages/blog/[slug].vue",
"pageType": "BlogPosting",
"installedModules": ["@nuxtjs/seo"],
"hasSeoMeta": true,
"hasSchemaOrg": false,
"hasOgImage": false,
"hasH1": true,
"suggestions": [
{
"priority": "medium",
"category": "schema",
"issue": "No structured data found",
"fix": "Add useSchemaOrg([defineBlogPosting({...})])"
},
{
"priority": "medium",
"category": "og-image",
"issue": "No OG image defined",
"fix": "Add defineOgImage({ component: '...' }) or <OgImage />"
}
]
}
Detection uses both file path and content patterns:
| Path Pattern | Detected Type |
|---|---|
/blog/, /posts/, /articles/ | BlogPosting |
/tool, /generator, /converter, /checker | SoftwareApplication |
/about | Person |
/product, /shop | Product |
/faq | FAQPage |
/how-to, /tutorial, /guide | HowTo |
/recipe | Recipe |
/event | Event |
/company, /team | Organization |
Content patterns also influence detection—prices suggest Product, dates suggest Article.
| Priority | Category | Typical Issues |
|---|---|---|
high | meta | Missing title, description, or useSeoMeta() |
medium | schema, og-image | No structured data, no OG image |
medium | html | Missing H1, no canonical URL |
low | html, performance | No semantic elements, using <img> instead of <NuxtImg> |
Analyze a Nuxt Content markdown file for SEO. Parses frontmatter, analyzes content structure, and returns prioritized suggestions.
.md files in the content/ directory. For Vue SFCs (.vue files), use analyze_page instead.| Parameter | Type | Description |
|---|---|---|
filePath | string | Path to markdown file (e.g., content/blog/my-post.md) |
fileContent | string | Content of the markdown file |
analyze_content_page({
filePath: 'content/blog/nuxt-seo-guide.md',
fileContent: '---\ntitle: SEO Guide\n---\n\n# Content here...'
})
Returns:
{
"filePath": "content/blog/nuxt-seo-guide.md",
"pageType": "BlogPosting",
"frontmatter": {
"fields": ["title", "description", "date"],
"hasTitle": true,
"hasDescription": true,
"hasImage": false,
"hasDate": true,
"hasAuthor": false
},
"content": {
"wordCount": 1250,
"h1Count": 1,
"h2Count": 4,
"imageCount": 2,
"internalLinkCount": 3,
"externalLinkCount": 1,
"estimatedReadTime": 7
},
"suggestions": [
{
"priority": "medium",
"category": "og-image",
"issue": "No cover/OG image specified",
"fix": "Add image: \"/path/to/image.jpg\" to frontmatter"
},
{
"priority": "medium",
"category": "meta",
"issue": "Missing author information",
"fix": "Add author: \"Author Name\" to frontmatter"
}
]
}
Detection uses file path and frontmatter:
| Path Pattern | Detected Type |
|---|---|
/blog/, /posts/, /articles/ | BlogPosting |
/learn/, /guides/, /tutorials/ | Article |
/docs/, /documentation/ | TechArticle |
/recipes/ | HowTo |
/faq | FAQPage |
/snippets/, /examples/ | Article |
The tool analyzes markdown structure:
| Metric | What It Checks |
|---|---|
wordCount | Total words (excluding code blocks) |
h1Count | Number of # headings (should be 0-1) |
h2Count | Number of ## section headings |
imageCount | Markdown images  |
internalLinkCount | Links to same site |
externalLinkCount | Links to other sites |
estimatedReadTime | Minutes at 200 wpm |
Generate ready-to-use useSchemaOrg() code. Pass metadata from analyze_page or provide manually.
| Parameter | Type | Description |
|---|---|---|
pageType | string | Article, BlogPosting, Product, Person, Organization, WebPage, FAQPage, HowTo, Recipe, Event, LocalBusiness, SoftwareApplication |
extractedMeta | object | Metadata for the schema (see below) |
options.includeWebPage | boolean | Include defineWebPage() wrapper (default: true) |
options.includeBreadcrumbs | boolean | Include breadcrumb schema (default: false) |
| Property | Types | Description |
|---|---|---|
title | string | Page title / headline |
description | string | Page description |
author | string | Author name |
publishedAt | string | ISO date published |
modifiedAt | string | ISO date modified |
image | string | Primary image URL |
price | string | Product price |
currency | string | Currency code (USD, EUR) |
name | string | Entity name |
jobTitle | string | Person's job title |
email | string | Contact email |
telephone | string | Contact phone |
address | string | Physical address |
socialUrls | string[] | Social profile URLs |
faqs | array | FAQ questions/answers |
steps | array | HowTo steps |
rating | number | Aggregate rating value |
reviewCount | number | Number of reviews |
applicationCategory | string | App category (default: DeveloperApplication) |
operatingSystem | string | OS requirement (default: Web) |
generate_schema_org({
pageType: 'BlogPosting',
extractedMeta: {
title: 'How to Add Meta Tags in Nuxt',
description: 'Guide to using useSeoMeta...',
author: 'Harlan Wilton',
publishedAt: '2024-01-15',
image: '/blog/meta-tags.png'
},
options: { includeBreadcrumbs: true }
})
Returns:
{
"pageType": "BlogPosting",
"code": "useSchemaOrg([\n defineWebPage({...}),\n defineBlogPosting({...}),\n defineBreadcrumb({...})\n])",
"requires": "@nuxtjs/schema-org",
"imports": "import { useSchemaOrg, defineWebPage, defineBlogPosting, defineBreadcrumb } from '@unhead/schema-org/vue'"
}
Generate a Vue component for OG images. Creates ready-to-use templates in components/OgImage/.
| Parameter | Type | Default | Description |
|---|---|---|---|
pageType | string | required | blog, product, landing, docs, tool |
props | string[] | [] | Additional props the template should accept |
style | string | minimal | minimal, gradient, image-bg |
generate_og_image_template({
pageType: 'blog',
style: 'gradient',
props: ['category']
})
Returns:
{
"filename": "OgImageBlog.vue",
"path": "components/OgImage/OgImageBlog.vue",
"code": "<script setup lang=\"ts\">...</script>\n<template>...</template>",
"usage": "defineOgImage({ component: 'OgImageBlog', title: '...' })",
"requires": "nuxt-og-image"
}
| Page Type | Default Props |
|---|---|
blog | title, description, author, date, readTime |
product | title, description, price, category |
landing | title, description, siteName |
docs | title, description, category |
tool | title, description, category |