Documentation
SEO Helpers
Sitemap, robots.txt, and metadata generation utilities.
SEO Helpers
The SDK provides utilities for generating sitemaps, robots.txt, and Next.js metadata — the building blocks for strong search engine optimization.
Metadata Builder
buildNextMetadata(post)
Converts a BlogPost into a Next.js-compatible Metadata object.
import { buildNextMetadata } from "@autoblogwriter/sdk";
const metadata = buildNextMetadata(post);Input: A BlogPost object.
Output: A NextMetadata object with:
{
title: "SEO title or post title",
description: "Meta description or excerpt",
keywords: ["keyword1", "keyword2"],
alternates: { canonical: "https://..." },
openGraph: {
type: "article",
title: "...",
description: "...",
images: [{ url: "https://..." }],
publishedTime: "2025-01-15T...",
modifiedTime: "2025-01-15T...",
},
twitter: {
card: "summary_large_image",
title: "...",
description: "...",
images: ["https://..."],
},
}Field Resolution:
| Metadata Field | Primary Source | Fallback |
|---|---|---|
title | post.seo.title | post.title |
description | post.seo.description | post.excerpt |
keywords | post.seo.keywords | Omitted if empty |
canonical | post.metadata.canonicalUrl | Omitted if not set |
og:image | post.metadata.ogImageUrl | Omitted if not set |
twitter:card | — | summary_large_image if OG image exists, otherwise summary |
Usage in Next.js:
// app/blog/[slug]/page.tsx
import { buildNextMetadata } from "@autoblogwriter/sdk";
import type { Metadata } from "next";
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { slug } = await params;
const post = await client.getPostBySlug(slug);
if (!post) return {};
return buildNextMetadata(post);
}Or use the higher-level helper:
import { generatePostMetadata } from "@autoblogwriter/sdk/next";
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { slug } = await params;
return generatePostMetadata(slug);
}Sitemap Builder
buildSitemap(options)
Generates a Next.js-compatible sitemap array from post entries.
import { buildSitemap } from "@autoblogwriter/sdk";
const sitemap = buildSitemap({
siteUrl: "https://mysite.com",
routePrefix: "/blog",
entries: [
{ slug: "first-post", updatedAt: "2025-01-15T10:00:00.000Z" },
{ slug: "second-post", updatedAt: "2025-01-20T10:00:00.000Z" },
],
});Result:
[
{ "url": "https://mysite.com/blog/first-post", "lastModified": "2025-01-15T10:00:00.000Z" },
{ "url": "https://mysite.com/blog/second-post", "lastModified": "2025-01-20T10:00:00.000Z" }
]Options:
| Option | Type | Default | Description |
|---|---|---|---|
siteUrl | string | — | Your site's base URL |
routePrefix | string | "/blog" | URL path prefix for blog posts |
entries | SitemapEntry[] | — | Array of { slug, updatedAt? } |
Usage in Next.js:
// app/sitemap.ts
import { buildSitemap, createAutoBlogWriterClient } from "@autoblogwriter/sdk";
export const revalidate = 300;
export default async function sitemap() {
const client = createAutoBlogWriterClient({ /* ... */ });
const entries = await client.getSitemapEntries();
return buildSitemap({
siteUrl: "https://mysite.com",
routePrefix: "/blog",
entries,
});
}Or use the higher-level helper:
// app/sitemap.ts
import { generateBlogSitemap } from "@autoblogwriter/sdk/next";
export const revalidate = 300;
export default function sitemap() {
return generateBlogSitemap();
}Robots Builder
buildRobots(options)
Generates a Next.js-compatible robots.txt configuration.
import { buildRobots } from "@autoblogwriter/sdk";
const robots = buildRobots({
siteUrl: "https://mysite.com",
sitemapPath: "/sitemap.xml",
});Result:
{
"rules": [{ "userAgent": "*", "allow": "/" }],
"sitemap": "https://mysite.com/sitemap.xml"
}Options:
| Option | Type | Default | Description |
|---|---|---|---|
siteUrl | string | — | Your site's base URL |
sitemapPath | string | "/sitemap.xml" | Path to your sitemap |
Usage in Next.js:
// app/robots.ts
import { buildRobots } from "@autoblogwriter/sdk";
export default function robots() {
return buildRobots({
siteUrl: "https://mysite.com",
});
}Or use the higher-level helper:
// app/robots.ts
import { generateBlogRobots } from "@autoblogwriter/sdk/next";
export default function robots() {
return generateBlogRobots();
}Complete SEO Setup
Here's a full example combining all SEO features:
// app/sitemap.ts
import { generateBlogSitemap } from "@autoblogwriter/sdk/next";
export const revalidate = 300;
export default function sitemap() { return generateBlogSitemap(); }// app/robots.ts
import { generateBlogRobots } from "@autoblogwriter/sdk/next";
export default function robots() { return generateBlogRobots(); }// app/blog/[slug]/page.tsx
import { fetchBlogPost, generatePostMetadata } from "@autoblogwriter/sdk/next";
import { BlogPost } from "@autoblogwriter/sdk/react";
export async function generateMetadata({ params }: Props) {
const { slug } = await params;
return generatePostMetadata(slug);
}
export default async function PostPage({ params }: Props) {
const { slug } = await params;
const post = await fetchBlogPost(slug);
return <BlogPost post={post} />;
}This gives you:
- Dynamic sitemap with all published posts
- Standard robots.txt allowing all crawlers
- Per-page metadata with OpenGraph and Twitter Cards
- Automatic cache revalidation via tags
Next Steps
- Webhooks & Revalidation — Keep your SEO data fresh.
- React Components — Render your posts.