2.4 KiB
2.4 KiB
🌐 Storage Metadata - Internationalization Update
✅ Updated Files:
1. storage/layout.tsx
Changes:
// ❌ Before:
interface StorageLayoutProps {
params: {
locale: string;
};
}
export async function generateMetadata({ params }: StorageLayoutProps) {
try {
return await generateStorageMetadata(params.locale as any);
} catch (error) {
console.error('Failed to generate storage metadata:', error); // ❌
return { /* fallback */ };
}
}
// ✅ After:
interface StorageLayoutProps {
params: Promise<{
locale: Locale;
}>;
}
export async function generateMetadata({ params }: StorageLayoutProps) {
const { locale } = await params;
return await generateStorageMetadata(locale);
}
Improvements:
- ✅ Async params (NextJS 15 pattern)
- ✅ Type-safe Locale
- ✅ Removed console.error
- ✅ Simplified error handling
2. storage/metadata.ts
Added:
return {
// ... existing metadata
// ✅ NEW: Alternates for SEO
alternates: {
canonical: `/${locale}/dashboard/storage`,
languages: {
'en': '/en/dashboard/storage',
'vi': '/vi/dashboard/storage',
},
},
// ✅ ENHANCED: OpenGraph
openGraph: {
// ...
alternateLocale: locale === 'vi' ? 'en_US' : 'vi_VN',
},
};
🎯 Metadata Features:
Vietnamese (vi):
Title: "Quản lý File - NEXTVISION AI"
Description: "Quản lý file và thư mục trên nền tảng..."
Keywords: "quản lý file, lưu trữ đám mây, chia sẻ file..."
Canonical: /vi/dashboard/storage
Alternate: /en/dashboard/storage
English (en):
Title: "File Storage - NEXTVISION AI"
Description: "File and folder management on NEXTVISION AI..."
Keywords: "file management, cloud storage, file sharing..."
Canonical: /en/dashboard/storage
Alternate: /vi/dashboard/storage
🔍 SEO Benefits:
- ✅ Canonical URLs: Prevent duplicate content
- ✅ Language alternates: Help search engines understand i18n
- ✅ Locale-specific OpenGraph: Better social sharing
- ✅ noindex, nofollow: Private dashboard không indexed
- ✅ Proper locale codes: vi_VN, en_US
✅ Status:
✅ Type-safe metadata
✅ No console logs
✅ Proper i18n support
✅ SEO optimized
✅ Clean code
🎉 Storage metadata fully internationalized!