Mcp

Dev Assist Tools

Tools that help AI assistants add SEO to your Nuxt pages. These require a Pro API key.

extract_meta_tags

Extract meta tags from rendered HTML output (not source code). This tool shows what actually renders, including meta from plugins, config, and middleware.

This tool requires the rendered HTML, not Vue/React source code. For source code analysis, use analyze_page (Vue) or analyze_content_page (Markdown).
ParameterTypeDescription
urlstringURL to fetch and extract meta tags from
htmlstringRaw 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": "..." }
  ]
}

Use Cases

  • Audit live pages - See what's actually rendered vs source code
  • Debug plugin output - Check if @nuxtjs/seo is adding expected tags
  • Compare environments - Verify staging matches production
  • Test local changes - Pass HTML from $fetch('http://localhost:3000') to test before deploy

analyze_page

Analyze 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.

ParameterTypeDescription
filePathstringPath to Vue file (e.g., pages/about.vue)
fileContentstringContent of the Vue file
nuxtConfigstringnuxt.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 />"
    }
  ]
}

Page Type Detection

Detection uses both file path and content patterns:

Path PatternDetected Type
/blog/, /posts/, /articles/BlogPosting
/tool, /generator, /converter, /checkerSoftwareApplication
/aboutPerson
/product, /shopProduct
/faqFAQPage
/how-to, /tutorial, /guideHowTo
/recipeRecipe
/eventEvent
/company, /teamOrganization

Content patterns also influence detection—prices suggest Product, dates suggest Article.

Suggestion Priorities

PriorityCategoryTypical Issues
highmetaMissing title, description, or useSeoMeta()
mediumschema, og-imageNo structured data, no OG image
mediumhtmlMissing H1, no canonical URL
lowhtml, performanceNo semantic elements, using <img> instead of <NuxtImg>

analyze_content_page

Analyze a Nuxt Content markdown file for SEO. Parses frontmatter, analyzes content structure, and returns prioritized suggestions.

Use this for .md files in the content/ directory. For Vue SFCs (.vue files), use analyze_page instead.
ParameterTypeDescription
filePathstringPath to markdown file (e.g., content/blog/my-post.md)
fileContentstringContent 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"
    }
  ]
}

Page Type Detection

Detection uses file path and frontmatter:

Path PatternDetected Type
/blog/, /posts/, /articles/BlogPosting
/learn/, /guides/, /tutorials/Article
/docs/, /documentation/TechArticle
/recipes/HowTo
/faqFAQPage
/snippets/, /examples/Article

Content Analysis

The tool analyzes markdown structure:

MetricWhat It Checks
wordCountTotal words (excluding code blocks)
h1CountNumber of # headings (should be 0-1)
h2CountNumber of ## section headings
imageCountMarkdown images ![](...)
internalLinkCountLinks to same site
externalLinkCountLinks to other sites
estimatedReadTimeMinutes at 200 wpm

generate_schema_org

Generate ready-to-use useSchemaOrg() code. Pass metadata from analyze_page or provide manually.

ParameterTypeDescription
pageTypestringArticle, BlogPosting, Product, Person, Organization, WebPage, FAQPage, HowTo, Recipe, Event, LocalBusiness, SoftwareApplication
extractedMetaobjectMetadata for the schema (see below)
options.includeWebPagebooleanInclude defineWebPage() wrapper (default: true)
options.includeBreadcrumbsbooleanInclude breadcrumb schema (default: false)

extractedMeta Properties

PropertyTypesDescription
titlestringPage title / headline
descriptionstringPage description
authorstringAuthor name
publishedAtstringISO date published
modifiedAtstringISO date modified
imagestringPrimary image URL
pricestringProduct price
currencystringCurrency code (USD, EUR)
namestringEntity name
jobTitlestringPerson's job title
emailstringContact email
telephonestringContact phone
addressstringPhysical address
socialUrlsstring[]Social profile URLs
faqsarrayFAQ questions/answers
stepsarrayHowTo steps
ratingnumberAggregate rating value
reviewCountnumberNumber of reviews
applicationCategorystringApp category (default: DeveloperApplication)
operatingSystemstringOS 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_og_image_template

Generate a Vue component for OG images. Creates ready-to-use templates in components/OgImage/.

ParameterTypeDefaultDescription
pageTypestringrequiredblog, product, landing, docs, tool
propsstring[][]Additional props the template should accept
stylestringminimalminimal, 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"
}

Default Props by Page Type

Page TypeDefault Props
blogtitle, description, author, date, readTime
producttitle, description, price, category
landingtitle, description, siteName
docstitle, description, category
tooltitle, description, category
Did this page help you?