تحقق من ملف sitemap.xml
أداة تقرأ الروابط المدرجة في ملف sitemap.xml، وتكشف ما ليس منها رابطًا مطلقًا صالحًا، وتبيّن ما إذا كان الملف يتضمّن تواريخ آخر تعديل (lastmod)، فتلتقط خللًا صغيرًا في صياغة رابط قد يجعل جوجل يتعثّر في الملف قبل إرساله.
شغّل الأداة مجانًا
خطأ واحد قد يُسقط الملف كله
خلافًا لملفات HTML التي يتسامح المتصفح مع أخطائها الصغيرة، ملف sitemap.xml يتبع معيار XML الصارم: وسم مفتوح دون إغلاق، أو حرف خاص غير مُرمَّز داخل رابط، قد يجعل الملف كاملًا غير قابل للقراءة من محرك البحث، لا السطر المعطوب وحده. تقرأ الأداة الروابط المدرجة وتُدرج ما ليس منها رابطًا مطلقًا صالحًا، بدل ترك صاحب الموقع يبحث يدويًا بين آلاف الأسطر عن الخلل.
الرابط المطلق لا النسبي
يشترط معيار sitemap أن يكون كل موقع رابطًا مطلقًا كاملًا، بالبروتوكول والنطاق معًا؛ فمسار نسبي مثل /products/42 غير صالح داخل السيتماب وإن عمل كرابط عادي داخل صفحة. وهذا هو الخطأ الأكثر شيوعًا الذي يتسلل من تصدير آلي أو تحرير يدوي، وهو ما بُنيت الأداة لكشفه: تُدرج لك كل رابط نسبي أو غير قابل للتحليل على حدة. لكنها تفحص الصياغة فقط ولا تفتح الروابط، فحالتها الفعلية عند الوصول (خطأ 404 مثلًا) فحص منفصل صفحة بصفحة.
الوضع المجاني من المتصفح
الصق محتوى الملف كاملًا في الأداة وستحصل على النتيجة فورًا داخل متصفحك مجانًا وبلا حدود، دون رفع الملف إلى خادم خارجي مهما بلغ عدد الروابط بداخله. للتحقق من ملف موقع مباشرة عبر رابطه دون تنزيله ونسخ محتواه يدويًا، يتوفر التنفيذ عبر الـAPI بسعر $0.002 للملف الواحد، وهذا مناسب لجدولة تحقق دوري بعد كل تحديث كبير على بنية الموقع.
حجم الملف له حدوده أيضًا
يفرض معيار sitemap حدًا أقصى لعدد الروابط داخل ملف واحد (خمسون ألف رابط) ولحجمه (خمسون ميغابايت غير مضغوط)، وموقع كبير يتجاوز هذا الحد يحتاج تقسيم روابطه على عدة ملفات فرعية مربوطة بملف فهرس واحد يشير إليها جميعًا. تقرأ الأداة الروابط المدرجة وتعدّها فتطّلع على العدد، لكنها لا تفرض هذا الحد ولا تمنع الملف المتجاوز؛ قرار التقسيم يبقى لك.
حالات الاستخدام
مطوّر يراجع ملفًا بعد نقل الموقع
يتحقق محمد الحربي من ملف sitemap.xml فور نقل الموقع إلى استضافة جديدة، فيكتشف روابط نسبية بدل المطلقة تسبّب فيها تصدير خاطئ.
متجر يتحقق من سيتماب جديد بعد تحديث الكتالوج
تتحقق شركة الواحة للتجارة المحدودة من أن روابط ملف sitemap المولّد حديثًا كلها مطلقة وصالحة قبل إرساله لأدوات المشرفين.
مدونة تتحقق قبل إرسال الملف لأدوات المشرفين
تتحقق سارة النعيمي من صحة صياغة روابط ملف sitemap قبل إرساله لأول مرة إلى أدوات مشرفي المواقع، لتفادي رفضه من أول محاولة.
الأسئلة الشائعة
هل يغادر ملفي جهازي عند اللصق؟
لا، التحقق من المتصفح يجري محليًا ولا يُرسل محتوى الملف إلى أي خادم.
ماذا يحدث إن كان الملف كبيرًا جدًا؟
يفرض المعيار حدًا لعدد الروابط وحجم الملف. تقرأ الأداة الروابط وتعدّها فتطّلع على العدد، لكنها لا تمنع ولا تنبّه على ملف يتجاوز الحد؛ قرار التقسيم متروك لك.
هل تتحقق الأداة من كل رابط داخل الملف فعليًا؟
تتحقق من صحة صياغة كل رابط بوصفه رابطًا مطلقًا، لكنها لا تفتح الروابط؛ لذا فكشف خطأ 404 عند الوصول فحص منفصل يجري صفحة بصفحة.
هل الاستخدام من المتصفح مجاني فعلًا؟
نعم، بلا حد أقصى لحجم الملف ودون تسجيل حساب.
كم يكلّف التحقق من ملف مباشرة عبر الـAPI؟
$0.002 للملف الواحد؛ تجلب الأداة ملف السيتماب وتفحص صياغة روابطه.
هل تصلح الأداة الأخطاء المكتشفة تلقائيًا؟
لا، تُدرج الروابط غير الصالحة فقط؛ تعديل الملف يبقى بيدك.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/seo/sitemap-validate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://example.com/sitemap.xml"}'const res = await fetch("https://api.kit.forhosting.com/seo/sitemap-validate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"url": "https://example.com/sitemap.xml"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/seo/sitemap-validate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"url": "https://example.com/sitemap.xml"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/seo/sitemap-validate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"url":"https://example.com/sitemap.xml"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"url":"https://example.com/sitemap.xml"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/seo/sitemap-validate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"url": "https://example.com/sitemap.xml"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "seo.sitemap_validate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |