x
This commit is contained in:
1 parent
cfd642dee0
commit
ae3799d8ce
21 files changed
+172
-30
No files matched your search
@@ -13,6 +13,7 @@ import DynamicPageRenderer from '@/components/dynamic/DynamicPageRenderer'
|
||||
import ProductCard from '@/components/ProductCard'
|
||||
import { getCategoriesResult, getProduct, getProductDetailSectionsResult, getProductResult, getProductReviewsResult, getProductsResult, getStoreSettingsResult, type ProductReview } from '@/lib/cms'
|
||||
import { resolveCategoryName, resolveLocalized } from '@/lib/localization'
|
||||
import { SUPPORTED_LOCALES } from '@/lib/locales'
|
||||
import { extractIdFromSlug, generateProductSlug } from '@/lib/slugify'
|
||||
import type { ProductAttribute } from '@homaroma/types'
|
||||
|
||||
@@ -361,8 +362,7 @@ export async function generateMetadata({ params }: { params: Promise<{ slug: str
|
||||
|
||||
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'https://www.homaroma.com'
|
||||
const customLanguages: Record<string, string> = {}
|
||||
const languages = ['th', 'en', 'ja', 'zh', 'vi', 'ko']
|
||||
for (const l of languages) {
|
||||
for (const l of SUPPORTED_LOCALES) {
|
||||
const locName = resolveLocalized(product.name, l) || product.brand.name
|
||||
customLanguages[l] = `${baseUrl}/${l}/products/${generateProductSlug(locName, product.id)}`
|
||||
}
|
||||
|
||||
@@ -2,14 +2,13 @@ import { MetadataRoute } from 'next';
|
||||
import { getCategories, getProducts, getArticlesResult } from '../lib/cms';
|
||||
import { generateProductSlug } from '../lib/slugify';
|
||||
import { resolveLocalized } from '../lib/localization';
|
||||
import { DEFAULT_LOCALE, SUPPORTED_LOCALES } from '../lib/locales';
|
||||
|
||||
const baseUrl = process.env.NEXT_PUBLIC_SITE_URL || 'http://localhost:3000';
|
||||
|
||||
const languages = ['th', 'en', 'ja', 'zh', 'vi', 'ko'];
|
||||
|
||||
function createAlternates(path: string) {
|
||||
const alternates: Record<string, string> = {};
|
||||
for (const lang of languages) {
|
||||
for (const lang of SUPPORTED_LOCALES) {
|
||||
alternates[lang] = `${baseUrl}/${lang}${path}`;
|
||||
}
|
||||
return alternates;
|
||||
@@ -32,7 +31,7 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
||||
];
|
||||
|
||||
const routes: MetadataRoute.Sitemap = staticPages.map((route) => ({
|
||||
url: `${baseUrl}/th${route}`,
|
||||
url: `${baseUrl}/${DEFAULT_LOCALE}${route}`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: 'daily',
|
||||
priority: route === '' ? 1 : 0.8,
|
||||
@@ -42,7 +41,7 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
||||
}));
|
||||
|
||||
const categoryRoutes: MetadataRoute.Sitemap = categories.map((category) => ({
|
||||
url: `${baseUrl}/th/category/${category.id}`,
|
||||
url: `${baseUrl}/${DEFAULT_LOCALE}/category/${category.id}`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: 'weekly',
|
||||
priority: 0.7,
|
||||
@@ -53,17 +52,17 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
||||
|
||||
const productRoutes: MetadataRoute.Sitemap = products.map((product) => {
|
||||
const alternates: Record<string, string> = {};
|
||||
let thSlug = '';
|
||||
let defaultSlug = '';
|
||||
|
||||
for (const lang of languages) {
|
||||
for (const lang of SUPPORTED_LOCALES) {
|
||||
const localizedName = resolveLocalized(product.name, lang) || (product.brand ? product.brand.name : 'product');
|
||||
const slug = generateProductSlug(localizedName, product.id);
|
||||
alternates[lang] = `${baseUrl}/${lang}/products/${slug}`;
|
||||
if (lang === 'th') thSlug = slug;
|
||||
if (lang === DEFAULT_LOCALE) defaultSlug = slug;
|
||||
}
|
||||
|
||||
return {
|
||||
url: `${baseUrl}/th/products/${thSlug}`,
|
||||
url: `${baseUrl}/${DEFAULT_LOCALE}/products/${defaultSlug}`,
|
||||
lastModified: new Date(),
|
||||
changeFrequency: 'daily',
|
||||
priority: 0.9,
|
||||
@@ -77,7 +76,7 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
||||
if (articlesResult.ok && articlesResult.data) {
|
||||
articlesResult.data.forEach((article) => {
|
||||
articleRoutes.push({
|
||||
url: `${baseUrl}/th/article/${article.slug}`,
|
||||
url: `${baseUrl}/${DEFAULT_LOCALE}/article/${article.slug}`,
|
||||
lastModified: new Date(article.updatedAt || article.createdAt),
|
||||
changeFrequency: 'monthly',
|
||||
priority: 0.6,
|
||||
|
||||
Reference in new issue
Block a user