أتمتة IndexNow: بلّغ محركات البحث بعد النشر
مستوى القارئ: متوسط
لو بتنشر صفحة جديدة ومش عايز تنتظر الزحف العشوائي، الأوتوميشن هنا يخلي إشعار محركات البحث خطوة ثابتة بعد النشر.
المشكلة باختصار
الطريقة الشائعة إنك تنشر المقال أو صفحة المنتج وتسيب محركات البحث تكتشفها وقت ما تزحف على الموقع. الطريقة دي بتفشل لما عندك محتوى سريع التغير: أسعار، صفحات هبوط، توثيق منتج، أو مقالات يومية. ممكن الصفحة تبقى منشورة، لكن الاكتشاف يتأخر ساعات أو أيام حسب قوة الموقع ونمط الزحف.
ركز: IndexNow مش وعد بالترتيب، ومش بديل عن جودة المحتوى. هو مجرد إشعار إن URL اتضاف أو اتعدل أو اتحذف. المكسب إنك تقلل زمن الإبلاغ من مراجعة يدوية أسبوعية حوالي 35 دقيقة إلى تشغيل تلقائي بعد النشر في 2 إلى 3 دقائق. الافتراض إن عندك موقع static أو CMS يقدر يشغّل GitHub Actions بعد كل push أو publish event.
مثال بسيط قبل الشرح العلمي
لنفترض إن عندك متجر صغير. أضفت صفحة منتج جديدة: https://example.com/products/desk-lamp. بدل ما تدخل Search Console أو تنتظر الزحف، السكربت يعمل 3 حاجات: يتأكد إن الرابط كامل وموجود في sitemap، يرسل الرابط إلى IndexNow، ثم يحفظ log بالنتيجة. لو حصل فشل 429 أو 5xx، يعيد المحاولة لاحقًا بدل ما يضيع الإشعار.
بالظبط زي إنك تغيّر عنوان مكتبك وتبعت إخطار رسمي للبريد. الإخطار لا يضمن إن كل شخص هيزورك النهارده، لكنه يقلل فرصة إن الناس تفضل رايحة للعنوان القديم.
علميًا، sitemap هو ملف يعرّف محركات البحث بالروابط المهمة عندك، وIndexNow بروتوكول HTTP بسيط لإرسال URLs تغيرت. Google توضح إن sitemap مجرد hint وليس ضمانًا للزحف، وIndexNow يطلب مفتاحًا منشورًا على موقعك للتحقق من ملكية الإرسال.
الخطوات العملية
- اعمل مفتاح IndexNow عشوائيًا من 8 إلى 128 حرفًا، مثل
2f4a9c21-index-key. - انشر ملف المفتاح على جذر الموقع:
https://example.com/2f4a9c21-index-key.txt، ومحتواه نفس قيمة المفتاح. - تأكد إن
sitemap.xmlيستخدم روابط مطلقة، مش/pageفقط. - بعد النشر، استخرج الروابط التي تغيرت من ملف أو من آخر commit.
- أرسلها إلى endpoint يدعم IndexNow، واحفظ status code في log.
name: notify-indexnow
on:
push:
branches: [main]
paths:
- "content/**"
- "public/sitemap.xml"
workflow_dispatch:
jobs:
notify:
runs-on: ubuntu-latest
env:
SITE_HOST: example.com
INDEXNOW_KEY: ${{ secrets.INDEXNOW_KEY }}
steps:
- uses: actions/checkout@v4
- name: Pick changed URLs
id: urls
run: |
git fetch --depth=2 origin main
git diff --name-only HEAD~1 HEAD | awk '/^content\// {print}' > changed.txt
node scripts/changed-urls.js changed.txt > urls.json
cat urls.json
- name: Submit to IndexNow
run: |
curl -sS -X POST "https://api.indexnow.org/indexnow" \
-H "Content-Type: application/json" \
-d @- <
// scripts/changed-urls.js
const fs = require('fs');
const files = fs.readFileSync(process.argv[2], 'utf8').trim().split('\n').filter(Boolean);
const urls = files.map((file) => {
const slug = file.replace(/^content\//, '').replace(/\.mdx?$/, '');
return `https://example.com/${slug}`;
});
process.stdout.write(JSON.stringify(urls));
القياس اللي يهمك
قِس حاجتين فقط في البداية. الأولى: زمن من لحظة merge إلى لحظة إرسال IndexNow. الثانية: نسبة التشغيلات الفاشلة. في فريق صغير بينشر 20 صفحة أسبوعيًا، المراجعة اليدوية قد تأخذ 30 إلى 40 دقيقة أسبوعيًا. نفس العملية بعد الأوتوميشن تتحول إلى 2 أو 3 دقائق انتظار داخل CI، ومعظمها وقت build موجود أصلًا.
الـ trade-off هنا واضح. بتكسب انتظامًا وسجلًا قابلًا للمراجعة، وبتخسر بعض التعقيد في مفاتيح التحقق ومتابعة الأخطاء. لو GitHub Actions عندك بياخد دقائق كثيرة أصلًا، حط الخطوة بعد build الناجح فقط، مش قبل الاختبارات.
أخطاء شائعة لازم تمنعها
- لا تبعت روابط نسبية. Google تنصح بالروابط الكاملة داخل sitemap، وده مهم كمان في logs.
- لا تبعت كل الموقع بعد كل تعديل. ابعت URLs التي تغيرت فقط، وإلا هتعمل ضوضاء بدون قيمة.
- لا تخزن المفتاح داخل الكود. استخدم GitHub Secrets، وانشر ملف التحقق العام فقط.
- لا تعتبر 200 أو 202 معناه ranking. ده معناه إن الإشعار اتقبل أو اتسجل، مش إن الصفحة هتتصدر.
متى لا تستخدم هذه الطريقة
لا تستخدمها لو موقعك فيه 10 صفحات ثابتة ونادرًا بتتغير. sitemap في robots.txt كفاية غالبًا. لا تستخدمها أيضًا لو URLs عندك غير مستقرة، أو بتغيّر canonical كل يوم، لأنك هتبعت إشارات متضاربة. ولو عندك CMS جاهز فيه plugin موثوق لـ IndexNow، استخدمه بدل بناء workflow مخصص إلا لو محتاج logs وتحكم أكثر.
المصادر
- توثيق IndexNow الرسمي لإرسال URL أو مجموعة URLs
- Google Search Central: بناء وإرسال sitemap
- GitHub Actions workflow syntax وجدولة وتشغيل workflows
الخطوة التالية
افتح مستودع الموقع، وانشر ملف مفتاح IndexNow على الجذر، ثم شغّل workflow يدويًا على URL واحد فقط. لو الـ log رجّع status مقبول، اربطه بعد النشر وليس قبله.