Generate slugs for Next.js dynamic routes and static generation. Use a slugify helper inside generateStaticParams (App Router) or getStaticPaths (Pages Router) to map content titles to clean, indexable URLs like /blog/my-post.
// app/blog/[slug]/page.tsx (App Router)
const slugify = (s) =>
s.toLowerCase().normalize('NFKD')
.replace(/[\u0300-\u036f]/g, '')
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '');
export function generateStaticParams() {
return posts.map((p) => ({ slug: slugify(p.title) }));
}