@turingnova/sitemap
v1.0.8
Published
Dynamic sitemap generator for Next.js applications with industry standards compliance
Maintainers
Readme
@turingnova/sitemap
A dynamic sitemap generator for Next.js applications that follows industry standards and generates SEO-optimized XML sitemaps.
Features
- 🚀 Dynamic Generation: Automatically detects pages and routes
- 📱 Next.js Compatible: Works with both App Router and Pages Router
- 🎯 SEO Optimized: Follows sitemap protocol standards
- ⚙️ Configurable: Flexible configuration options
- 🔄 Auto-updating: Integrates with build process
- 📊 Multiple Formats: Supports sitemap index for large sites
- 🎨 Priority & Frequency: Customizable priority and change frequency
- 📅 Last Modified: Automatic last modified dates
Installation
npm install @turingnova/sitemapQuick Start
1. Initialize Sitemap Configuration
# Initialize with automatic site URL detection
npx init sitemap
# Or with custom options
npx init sitemap --siteUrl https://yourdomain.com --outDir public
# Skip prompts with defaults
npx init sitemap --yesThis will create:
sitemap.config.js- Main configuration fileapp/sitemap.ts- App Router integration (if app directory exists)pages/sitemap.xml.tsx- Pages Router integration (if pages directory exists)examples/- Example configurations- Updated
package.jsonscripts
2. Generate Sitemap
# Using npm script
npm run sitemap
# Using npx
npx sitemap
# Using npx with options
npx sitemap --siteUrl https://yourdomain.com --outDir public3. Access Your Sitemap
Visit https://yourdomain.com/sitemap.xml to see your generated sitemap.
Note: The sitemap is automatically accessible at your domain root (e.g., yourdomain.com/sitemap.xml).
Configuration
Basic Configuration
// sitemap.config.js
module.exports = {
siteUrl: "https://yourdomain.com",
sitemapSize: 7000,
changefreq: "daily",
priority: 0.7,
};Advanced Configuration
// sitemap.config.js
module.exports = {
siteUrl: "https://yourdomain.com",
sitemapSize: 7000,
changefreq: "daily",
priority: 0.7,
// Exclude specific paths
exclude: ["/admin/*", "/private/*", "/api/*"],
// Custom transformations
transform: async (config, path) => {
return {
loc: path,
changefreq: config.changefreq,
priority: config.priority,
lastmod: new Date().toISOString(),
};
},
// Additional paths
additionalPaths: async (config) => {
const result = [];
// Add dynamic routes
const posts = await getPosts();
posts.forEach((post) => {
result.push({
loc: `/blog/${post.slug}`,
changefreq: "weekly",
priority: 0.8,
lastmod: post.updatedAt,
});
});
return result;
},
};CLI Commands
Initialize Configuration
npx init sitemap [options]Options:
-u, --siteUrl <url>- Your website URL-o, --outDir <path>- Output directory (default: public)-y, --yes- Skip prompts and use defaults
Generate Sitemap
npm sitemap generate [options]
# or
npx sitemap [options]Options:
-c, --config <path>- Path to config file (default: sitemap.config.js)-o, --outDir <path>- Output directory (default: public)-u, --siteUrl <url>- Website URL--gzip- Generate gzipped sitemap
API Reference
Configuration Options
| Option | Type | Default | Description |
| ----------------- | -------- | ------- | ----------------------------- |
| siteUrl | string | - | Your website URL (required) |
| sitemapSize | number | 7000 | Maximum URLs per sitemap file |
| changefreq | string | 'daily' | Default change frequency |
| priority | number | 0.7 | Default priority |
| exclude | string[] | [] | Paths to exclude |
| transform | function | - | Custom URL transformation |
| additionalPaths | function | - | Add custom URLs |
Programmatic Usage
const { generateSitemap } = require("@turingnova/sitemap");
const config = {
siteUrl: "https://yourdomain.com",
// ... other options
};
generateSitemap(config);Integration with Next.js
App Router
Create app/sitemap.ts:
import { generateSitemap } from "@turingnova/sitemap";
export default async function sitemap() {
const config = {
siteUrl: "https://yourdomain.com",
// ... your config
};
return generateSitemap(config);
}Pages Router
Create pages/sitemap.xml.tsx:
import { GetServerSideProps } from "next";
import { generateSitemap } from "@turingnova/sitemap";
export const getServerSideProps: GetServerSideProps = async ({ res }) => {
const config = {
siteUrl: "https://yourdomain.com",
// ... your config
};
const sitemap = await generateSitemap(config);
res.setHeader("Content-Type", "text/xml");
res.write(sitemap);
res.end();
return {
props: {},
};
};
export default function Sitemap() {
return null;
}Package.json Scripts
After running npx init sitemap, your package.json will include:
{
"scripts": {
"sitemap": "turingnova-sitemap",
"sitemap:generate": "turingnova-sitemap"
}
}Industry Standards Compliance
This package follows the Sitemap Protocol and includes:
- ✅ Valid XML structure
- ✅ Proper namespace declarations
- ✅ Required URL elements (loc)
- ✅ Optional elements (lastmod, changefreq, priority)
- ✅ Sitemap index support for large sites
- ✅ Compression support (gzip)
- ✅ Proper HTTP headers
License
MIT License - see the LICENSE file for details.
Support
- 📧 Email: [email protected]
- 🐛 Issues: GitHub Issues
- 📖 Documentation: GitHub Wiki
