feat: implement programmatic SEO for solutions pages
- Add 10 oil-for-concern solution pages with localized slugs - Support 4 languages: sr, en, de, fr with proper canonical URLs - Add solutions hub, by-concern, and by-oil directory pages - Filter bundle products from solutions pages - Add hideLangSwitcher prop to Header component - Update translations for all languages - Fix canonical URLs to include locale prefix
This commit is contained in:
@@ -2,7 +2,8 @@ import { readFile } from "fs/promises";
|
||||
import { join } from "path";
|
||||
import type {
|
||||
OilForConcernPage,
|
||||
LocalizedSEOKeywords
|
||||
LocalizedSEOKeywords,
|
||||
LocalizedString
|
||||
} from "./types";
|
||||
|
||||
const DATA_DIR = join(process.cwd(), "data");
|
||||
@@ -63,17 +64,24 @@ export async function getAllOilForConcernPages(): Promise<OilForConcernPage[]> {
|
||||
}
|
||||
|
||||
export async function getAllSolutionSlugs(): Promise<Array<{ locale: string; slug: string }>> {
|
||||
const slugs = await getAllOilForConcernSlugs();
|
||||
const pages = await getAllOilForConcernPages();
|
||||
const result: Array<{ locale: string; slug: string }> = [];
|
||||
|
||||
for (const slug of slugs) {
|
||||
for (const page of pages) {
|
||||
for (const locale of ["sr", "en", "de", "fr"] as const) {
|
||||
result.push({
|
||||
locale,
|
||||
slug
|
||||
slug: page.localizedSlugs[locale]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
export async function getOilForConcernPageBySlug(slug: string, locale: string): Promise<OilForConcernPage | null> {
|
||||
const pages = await getAllOilForConcernPages();
|
||||
return pages.find(page =>
|
||||
page.localizedSlugs[locale as "sr" | "en" | "de" | "fr"] === slug
|
||||
) || null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user