-
Notifications
You must be signed in to change notification settings - Fork 2
Quick Start
Power SEO Bot edited this page Feb 27, 2026
·
1 revision
Get power-seo running in your project in less than 5 minutes.
npm install @power-seo/meta @power-seo/schemaapp/layout.tsx:
import { createMetadata } from '@power-seo/meta';
export const metadata = createMetadata({
title: {
template: '%s | My Site',
default: 'Welcome to My Site',
},
description: 'Your site description here',
metadataBase: new URL('https://example.com'),
openGraph: {
type: 'website',
url: 'https://example.com',
siteName: 'My Site',
},
});
export default function RootLayout({ children }) {
return (
<html>
<body>{children}</body>
</html>
);
}app/blog/[slug]/page.tsx:
import { createMetadata } from '@power-seo/meta';
import { article, toJsonLdString } from '@power-seo/schema';
export function generateMetadata({ params }) {
return createMetadata({
title: 'My Blog Post',
description: 'A great article about SEO.',
canonical: `https://example.com/blog/${params.slug}`,
openGraph: {
type: 'article',
publishedTime: '2026-01-15T00:00:00Z',
},
});
}
export default function BlogPage() {
const schema = article({
headline: 'My Blog Post',
datePublished: '2026-01-15',
author: { name: 'Jane Doe' },
});
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: toJsonLdString(schema) }}
/>
<article>
<h1>My Blog Post</h1>
<p>Your content here...</p>
</article>
</>
);
}npm run build
npm run devVisit http://localhost:3000/blog/my-post and:
- Check browser DevTools → Elements →
<head> - Verify meta tags are present
- Use Schema.org validator to test JSON-LD
✅ Done! You now have full SEO meta tags and structured data.
npm install @power-seo/meta @power-seo/schemaroutes/root.tsx:
import { createMetaDescriptors } from '@power-seo/meta';
import type { MetaFunction } from '@remix-run/node';
export const meta: MetaFunction = () =>
createMetaDescriptors({
title: 'My Site',
description: 'Your site description',
canonical: 'https://example.com',
openGraph: {
type: 'website',
url: 'https://example.com',
siteName: 'My Site',
},
});
export default function Root() {
return (
<html>
<head>
<meta charSet="utf-8" />
</head>
<body>{/* Outlet */}</body>
</html>
);
}routes/blog.$slug.tsx:
import { createMetaDescriptors } from '@power-seo/meta';
import { article, toJsonLdString } from '@power-seo/schema';
import type { MetaFunction, LoaderFunction } from '@remix-run/node';
export const loader: LoaderFunction = async ({ params }) => {
const post = await getPost(params.slug);
return { post };
};
export const meta: MetaFunction = ({ data }) =>
createMetaDescriptors({
title: data.post.title,
description: data.post.excerpt,
canonical: `https://example.com/blog/${data.post.slug}`,
openGraph: {
type: 'article',
publishedTime: data.post.date,
},
});
export default function BlogPost({ loaderData }) {
const schema = article({
headline: loaderData.post.title,
datePublished: loaderData.post.date,
});
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: toJsonLdString(schema) }}
/>
<article>{loaderData.post.content}</article>
</>
);
}npm run dev✅ Done! Meta tags automatically render on both server and client.
npm install @power-seo/react @power-seo/schema @power-seo/coreApp.tsx:
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { DefaultSEO } from '@power-seo/react';
function App() {
return (
<DefaultSEO
titleTemplate="%s | My Site"
defaultTitle="My Site"
description="Welcome to my site"
openGraph={{
type: 'website',
locale: 'en_US',
url: 'https://example.com',
siteName: 'My Site',
}}
twitter={{
site: '@mysite',
cardType: 'summary_large_image',
}}
>
<BrowserRouter>
<Routes>
<Route path="/blog/:slug" element={<BlogPage />} />
</Routes>
</BrowserRouter>
</DefaultSEO>
);
}
export default App;pages/BlogPage.tsx:
import { SEO, Breadcrumb } from '@power-seo/react';
import { article, toJsonLdString } from '@power-seo/schema';
import { useEffect, useState } from 'react';
import { useParams } from 'react-router-dom';
export default function BlogPage() {
const { slug } = useParams();
const [post, setPost] = useState(null);
useEffect(() => {
// Fetch post data
getPost(slug).then(setPost);
}, [slug]);
if (!post) return <div>Loading...</div>;
const schema = article({
headline: post.title,
datePublished: post.date,
author: { name: post.author },
});
return (
<>
<SEO
title={post.title}
description={post.excerpt}
canonical={`https://example.com/blog/${post.slug}`}
openGraph={{
type: 'article',
images: [{ url: post.image, width: 1200, height: 630 }],
}}
/>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: toJsonLdString(schema) }}
/>
<Breadcrumb
items={[
{ name: 'Home', url: '/' },
{ name: 'Blog', url: '/blog' },
{ name: post.title },
]}
/>
<article>
<h1>{post.title}</h1>
<p>{post.content}</p>
</article>
</>
);
}npm run devNavigate to a blog page and check browser DevTools for meta tags.
✅ Done! SPA now has dynamic SEO meta tags.
npm install @power-seo/content-analysisimport { analyzeContent } from '@power-seo/content-analysis';
const result = analyzeContent({
title: 'My Article',
metaDescription: 'Description',
content: '<h1>My Article</h1><p>Content...</p>',
focusKeyphrase: 'my keyword',
images: [{ src: '/image.jpg', alt: 'Image alt' }],
internalLinks: ['/page1', '/page2'],
externalLinks: ['https://external.com'],
});
console.log(`SEO Score: ${result.score}/${result.maxScore}`);
result.recommendations.forEach(rec => console.log(`- ${rec}`));npm install @power-seo/sitemapapp/sitemap.ts (Next.js):
import { toNextSitemap } from '@power-seo/sitemap/next';
export default async function sitemap() {
const urls = await fetchAllUrls();
return toNextSitemap(urls);
}npm install @power-seo/previewimport { generateSerpPreview } from '@power-seo/preview';
const preview = generateSerpPreview({
title: 'My Article Title',
description: 'My article description',
url: 'https://example.com/article',
siteTitle: 'My Site',
});
console.log(preview.title); // Full title with site name
console.log(preview.titleTruncated); // true if cut off
console.log(preview.displayUrl); // Formatted URL- Package Selection - Choose packages for your needs
- All 17 Packages - Detailed guides for each package
- Use Cases - Real-world examples