feat: dynamic sitemap and robots.txt at app root
This commit is contained in:
parent
c3b3868288
commit
f5857f1298
@ -1,11 +0,0 @@
|
|||||||
# *
|
|
||||||
User-agent: *
|
|
||||||
Disallow: /admin/*
|
|
||||||
|
|
||||||
# Host
|
|
||||||
Host: http://localhost:3000
|
|
||||||
|
|
||||||
# Sitemaps
|
|
||||||
Sitemap: http://localhost:3000/sitemap.xml
|
|
||||||
Sitemap: http://localhost:3000/pages-sitemap.xml
|
|
||||||
Sitemap: http://localhost:3000/posts-sitemap.xml
|
|
||||||
@ -1,5 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
||||||
<sitemap><loc>http://localhost:3000/pages-sitemap.xml</loc></sitemap>
|
|
||||||
<sitemap><loc>http://localhost:3000/posts-sitemap.xml</loc></sitemap>
|
|
||||||
</sitemapindex>
|
|
||||||
22
src/app/robots.ts
Normal file
22
src/app/robots.ts
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import type { MetadataRoute } from 'next'
|
||||||
|
|
||||||
|
export default function robots(): MetadataRoute.Robots {
|
||||||
|
const siteUrl = process.env.NEXT_PUBLIC_SERVER_URL || 'https://fiberdirekt.se'
|
||||||
|
|
||||||
|
return {
|
||||||
|
rules: [
|
||||||
|
{
|
||||||
|
userAgent: '*',
|
||||||
|
allow: '/',
|
||||||
|
disallow: [
|
||||||
|
'/admin',
|
||||||
|
'/admin/',
|
||||||
|
'/api/',
|
||||||
|
'/_next/',
|
||||||
|
],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
sitemap: `${siteUrl}/sitemap.xml`,
|
||||||
|
host: siteUrl,
|
||||||
|
}
|
||||||
|
}
|
||||||
70
src/app/sitemap.ts
Normal file
70
src/app/sitemap.ts
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import type { MetadataRoute } from 'next'
|
||||||
|
import { getPayload } from 'payload'
|
||||||
|
import config from '@payload-config'
|
||||||
|
|
||||||
|
export const dynamic = 'force-dynamic'
|
||||||
|
|
||||||
|
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
||||||
|
const payload = await getPayload({ config })
|
||||||
|
const siteUrl = process.env.NEXT_PUBLIC_SERVER_URL || 'https://fiberdirekt.se'
|
||||||
|
|
||||||
|
// ── Fetch all published pages ──────────────────────────────────────────
|
||||||
|
const pages = await payload.find({
|
||||||
|
collection: 'pages',
|
||||||
|
draft: false,
|
||||||
|
limit: 1000,
|
||||||
|
overrideAccess: false,
|
||||||
|
select: {
|
||||||
|
slug: true,
|
||||||
|
updatedAt: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
// ── Fetch all published posts ──────────────────────────────────────────
|
||||||
|
const posts = await payload.find({
|
||||||
|
collection: 'posts',
|
||||||
|
draft: false,
|
||||||
|
limit: 1000,
|
||||||
|
overrideAccess: false,
|
||||||
|
select: {
|
||||||
|
slug: true,
|
||||||
|
updatedAt: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
// ── Static routes ──────────────────────────────────────────────────────
|
||||||
|
const staticRoutes: MetadataRoute.Sitemap = [
|
||||||
|
{
|
||||||
|
url: siteUrl,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: 'weekly',
|
||||||
|
priority: 1.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `${siteUrl}/posts`,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: 'weekly',
|
||||||
|
priority: 0.8,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
// ── Dynamic page routes ────────────────────────────────────────────────
|
||||||
|
const pageRoutes: MetadataRoute.Sitemap = pages.docs
|
||||||
|
.filter((page) => page.slug !== 'home') // home is already the root URL
|
||||||
|
.map((page) => ({
|
||||||
|
url: `${siteUrl}/${page.slug}`,
|
||||||
|
lastModified: new Date(page.updatedAt),
|
||||||
|
changeFrequency: 'monthly' as const,
|
||||||
|
priority: 0.8,
|
||||||
|
}))
|
||||||
|
|
||||||
|
// ── Dynamic post routes ────────────────────────────────────────────────
|
||||||
|
const postRoutes: MetadataRoute.Sitemap = posts.docs.map((post) => ({
|
||||||
|
url: `${siteUrl}/posts/${post.slug}`,
|
||||||
|
lastModified: new Date(post.updatedAt),
|
||||||
|
changeFrequency: 'monthly' as const,
|
||||||
|
priority: 0.6,
|
||||||
|
}))
|
||||||
|
|
||||||
|
return [...staticRoutes, ...pageRoutes, ...postRoutes]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user