fakhr-khaleej-blog
Version:
Moving and relocation services blog
218 lines (198 loc) • 7.27 kB
JavaScript
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 `
<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('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"></urlset>');
res.end();
return {
props: {},
};
}
}
export default function Sitemap() {
// هذه الصفحة لن تكون قابلة للتصفح من جانب العميل
return null;
}