SEO Components
SEO components handle meta tags, structured data, and navigation aids.
Main SEO component for meta tags:
---import SEO from '@/components/seo/SEO.astro';---
<head> <SEO title="Page Title" description="Page description for search results" image="/og-image.png" imageAlt="Description of the image" /></head>Generated Tags
Section titled “Generated Tags”<title>with site name suffixmeta description- Canonical URL
- Open Graph tags (og:title, og:description, og:image, etc.)
- Twitter Card tags
robotsmeta (if noindex/nofollow)
| Prop | Type | Default | Description |
|---|---|---|---|
title | string | — | Page title |
description | string | Site description | Meta description |
image | string | Default OG image | OG image URL |
imageAlt | string | — | OG image alt text |
noindex | boolean | false | Prevent indexing |
nofollow | boolean | false | Prevent following |
article | object | — | Article metadata |
JsonLd
Section titled “JsonLd”Structured data component:
---import JsonLd from '@/components/seo/JsonLd.astro';import { createBlogPostSchema, createBreadcrumbSchema } from '@/lib/schema';
const blogSchema = createBlogPostSchema({ title: post.data.title, description: post.data.description, url: Astro.url.href, image: ogImageUrl, datePublished: post.data.publishedAt, author: { name: post.data.author },});
const breadcrumbs = createBreadcrumbSchema([ { name: 'Home', url: '/' }, { name: 'Blog', url: '/blog' }, { name: post.data.title, url: Astro.url.href },]);---
<JsonLd schema={[blogSchema, breadcrumbs]} />Schema Helpers
Section titled “Schema Helpers”| Helper | Use Case |
|---|---|
createWebsiteSchema() | Homepage |
createOrganizationSchema() | About page, homepage |
createBlogPostSchema(post) | Blog posts |
createBreadcrumbSchema(items) | Any page with breadcrumbs |
createFAQSchema(faqs) | FAQ pages |
Breadcrumbs
Section titled “Breadcrumbs”Breadcrumb navigation component:
---import Breadcrumbs from '@/components/seo/Breadcrumbs.astro';---
<Breadcrumbs items={[ { label: 'Home', href: '/' }, { label: 'Blog', href: '/blog' }, { label: 'Current Article' }, ]}/>Features
Section titled “Features”- Proper semantic markup (
<nav>witharia-label) - JSON-LD breadcrumb schema
- Current page indication
- Customizable separator
| Prop | Type | Default | Description |
|---|---|---|---|
items | BreadcrumbItem[] | — | Breadcrumb items |
separator | string | '/' | Separator character |
Examples
Section titled “Examples”Homepage SEO
Section titled “Homepage SEO”---import SEO from '@/components/seo/SEO.astro';import JsonLd from '@/components/seo/JsonLd.astro';import { createWebsiteSchema, createOrganizationSchema } from '@/lib/schema';---
<head> <SEO title="Home" description="Welcome to our website" /> <JsonLd schema={[ createWebsiteSchema(), createOrganizationSchema(), ]} /></head>Blog Post SEO
Section titled “Blog Post SEO”---import SEO from '@/components/seo/SEO.astro';import JsonLd from '@/components/seo/JsonLd.astro';import { createBlogPostSchema } from '@/lib/schema';---
<head> <SEO title={post.title} description={post.description} image={`/og/blog/${post.slug}.png`} article={{ publishedTime: post.publishedAt.toISOString(), authors: [post.author], tags: post.tags, }} /> <JsonLd schema={createBlogPostSchema(post)} /></head>FAQ Page SEO
Section titled “FAQ Page SEO”---import JsonLd from '@/components/seo/JsonLd.astro';import { createFAQSchema } from '@/lib/schema';
const faqs = await getCollection('faqs');---
<JsonLd schema={createFAQSchema(faqs)} />