UNPKG

fakhr-khaleej-blog

Version:
218 lines (198 loc) 7.27 kB
import { getAllPosts } from '../lib/blog'; import { areas } from '../pages/areas/[slug]'; // استخدام متغيرات البيئة للحصول على عنوان الموقع const BASE_URL = process.env.NEXT_PUBLIC_SITE_URL || 'https://fakhrkhaleej.com'; // تاريخ التحديث الافتراضي const DEFAULT_CHANGE_FREQ = { HOME: 'daily', SERVICES: 'weekly', AREAS: 'weekly', BLOG: 'weekly', BLOG_POST: 'monthly', AREA_PAGE: 'monthly', SERVICE_PAGE: 'monthly', CONTACT: 'monthly' }; // أولوية الصفحات const DEFAULT_PRIORITY = { HOME: '1.0', SERVICES: '0.9', AREAS: '0.9', BLOG: '0.8', BLOG_POST: '0.7', AREA_PAGE: '0.8', SERVICE_PAGE: '0.8', CONTACT: '0.7' }; // الخدمات الرئيسية const MAIN_SERVICES = [ { slug: 'corporate', lastmod: new Date().toISOString(), title: 'خدمات نقل الشركات' }, { slug: 'cleaning', lastmod: new Date().toISOString(), title: 'خدمات التنظيف المتخصصة' }, { slug: 'storage', lastmod: new Date().toISOString(), title: 'خدمات التخزين' }, { slug: 'assembly', lastmod: new Date().toISOString(), title: 'خدمات فك وتركيب الأثاث' } ]; /** * توليد خريطة الموقع بتنسيق XML * @param {Array} posts - قائمة المقالات * @param {Array} areasData - قائمة المناطق * @returns {string} - محتوى ملف XML */ function generateSiteMap(posts, areasData) { const today = new Date().toISOString(); return `<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"> <!-- الصفحات الثابتة --> <url> <loc>${BASE_URL}</loc> <lastmod>${today}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.HOME}</changefreq> <priority>${DEFAULT_PRIORITY.HOME}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${BASE_URL}" /> <image:image> <image:loc>${BASE_URL}/images/hero_banner.jpg</image:loc> <image:title>فخر الخليج - خدمات نقل العفش والأثاث المتخصصة</image:title> </image:image> </url> <!-- صفحة الخدمات الرئيسية --> <url> <loc>${BASE_URL}/services</loc> <lastmod>${today}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.SERVICES}</changefreq> <priority>${DEFAULT_PRIORITY.SERVICES}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${BASE_URL}/services" /> <image:image> <image:loc>${BASE_URL}/images/services/main_services.jpg</image:loc> <image:title>خدمات فخر الخليج المتميزة</image:title> </image:image> </url> <!-- صفحات الخدمات الفردية --> ${MAIN_SERVICES.map(service => ` <url> <loc>${BASE_URL}/services/${service.slug}</loc> <lastmod>${service.lastmod}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.SERVICE_PAGE}</changefreq> <priority>${DEFAULT_PRIORITY.SERVICE_PAGE}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${BASE_URL}/services/${service.slug}" /> <image:image> <image:loc>${BASE_URL}/images/services/${service.slug}.jpg</image:loc> <image:title>${service.title}</image:title> </image:image> </url> `).join('')} <!-- صفحة المناطق الرئيسية --> <url> <loc>${BASE_URL}/areas</loc> <lastmod>${today}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.AREAS}</changefreq> <priority>${DEFAULT_PRIORITY.AREAS}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${BASE_URL}/areas" /> <image:image> <image:loc>${BASE_URL}/images/areas/saudi_map.jpg</image:loc> <image:title>مناطق خدمة فخر الخليج في المملكة العربية السعودية</image:title> </image:image> </url> <!-- صفحة الاتصال --> <url> <loc>${BASE_URL}/contact</loc> <lastmod>${today}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.CONTACT}</changefreq> <priority>${DEFAULT_PRIORITY.CONTACT}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${BASE_URL}/contact" /> </url> <!-- صفحة المدونة الرئيسية --> <url> <loc>${BASE_URL}/blog</loc> <lastmod>${today}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.BLOG}</changefreq> <priority>${DEFAULT_PRIORITY.BLOG}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${BASE_URL}/blog" /> </url> <!-- صفحات المدونة --> ${posts .map(({ id, date, title, image }) => { const postDate = new Date(date).toISOString(); return ` <url> <loc>${`${BASE_URL}/blog/${id}`}</loc> <lastmod>${postDate}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.BLOG_POST}</changefreq> <priority>${DEFAULT_PRIORITY.BLOG_POST}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${`${BASE_URL}/blog/${id}`}" /> <image:image> <image:loc>${`${BASE_URL}${image}`}</image:loc> <image:title>${title}</image:title> </image:image> </url> `; }) .join('')} <!-- صفحات المناطق --> ${areasData .map((area) => ` <url> <loc>${`${BASE_URL}/areas/${area.slug}`}</loc> <lastmod>${today}</lastmod> <changefreq>${DEFAULT_CHANGE_FREQ.AREA_PAGE}</changefreq> <priority>${DEFAULT_PRIORITY.AREA_PAGE}</priority> <xhtml:link rel="alternate" hreflang="ar" href="${`${BASE_URL}/areas/${area.slug}`}" /> <image:image> <image:loc>${`${BASE_URL}/images/areas/${area.slug}.jpg`}</image:loc> <image:title>خدمات نقل العفش في ${area.name}</image:title> </image:image> </url> `) .join('')} </urlset> `; } /** * معالجة طلب خريطة الموقع */ export async function getServerSideProps({ res }) { try { // الحصول على بيانات المقالات والمناطق const allPosts = getAllPosts(); // توليد خريطة الموقع بتنسيق XML const sitemap = generateSiteMap(allPosts, areas); // تعيين رأس الاستجابة والمحتوى res.setHeader('Content-Type', 'text/xml'); res.setHeader('Cache-Control', 'public, max-age=86400, stale-while-revalidate=604800'); res.write(sitemap); res.end(); return { props: {}, }; } catch (error) { console.error('Error generating sitemap:', error); // في حالة حدوث خطأ، إرجاع خريطة موقع فارغة res.statusCode = 500; res.write('<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>'); res.end(); return { props: {}, }; } } export default function Sitemap() { // هذه الصفحة لن تكون قابلة للتصفح من جانب العميل return null; }