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