الوصفة
تتبع الروابط الخلفية باستخدام اختلاف أسبوعي يمكنك قراءته في دقيقة واحدة
السحب، التخزين، المقارنة، النشر. الوصفة كاملة تتكون من ملف بايثون واحد، ومجلد يحتوي على ملفات JSON مؤرخة، وسطر كرون واحد.

الوصفة، من البداية إلى النهاية
- 1
إنشاء المفتاح
سجّل الدخول باستخدام Google، أنشئ مفتاحاً من صفحة الحساب وقم بتصديره باسم
RANKIFT_KEY. لا تقم بإدراجه في المستودع (repo). - 2
اختر الإجراء
refdomainsلإجراء الاختلاف على مستوى النطاق، وهو ما تحتاجه معظم التنبيهات. استخدمbacklinksفقط عندما تحتاج إلى عناوين URL والنصوص التأسيسية (anchor text)، بنفس تكلفة 2 رصيد. - 3
تخزين لقطات مؤرخة
ملف واحد لكل نطاق لكل تشغيل، مسماه بالتاريخ. القرص رخيص، والملفات القديمة تتيح لك الإجابة عن أسئلة لم يطرحها أحد بعد.
- 4
الاختلاف والنشر
قارن بين الملفين الأحدثين، اطبع ما تم حذفه وما تم إضافته، واخرج بهدوء إذا كانت كلتا القائمتين فارغتين.
- 5
جدولة التشغيل
كرون في صباح يوم الاثنين. أضف إشعاراً بالفشل، لأن المراقب الصامت أسوأ من انعدام المراقبة.
diff.py
تم التحقق من المعلمات الموثقة: action، q، per، page و key. يختلف شكل الاستجابة حسب الإجراء، لذا اطبع استجابة حقيقية واحدة وحدد ROWS و ID لتطابقها قبل الوثوق بها.
import json, os, sys, glob, urllib.parse, urllib.request
KEY, SITE = os.environ['RANKIFT_KEY'], 'https://rankift.com/api.php'
ROWS, ID = 'rows', 'domain' # adjust after inspecting one response
def pull(domain):
out, page = [], 1
while True:
qs = urllib.parse.urlencode({'action': 'refdomains', 'q': domain,
'per': 1000, 'page': page, 'key': KEY})
with urllib.request.urlopen(f'{SITE}?{qs}') as r:
batch = json.load(r)[ROWS]
out += batch
if len(batch) < 1000 or page >= 5: # five pages = 5,000 rows
return out
page += 1
domain, date = sys.argv[1], sys.argv[2]
json.dump(pull(domain), open(f'snap/{domain}-{date}.json', 'w'))
files = sorted(glob.glob(f'snap/{domain}-*.json'))
if len(files) > 1:
old = {r[ID] for r in json.load(open(files[-2]))}
new = {r[ID] for r in json.load(open(files[-1]))}
lost, gained = sorted(old - new), sorted(new - old)
if lost or gained:
print(f'{domain}: -{len(lost)} +{len(gained)}')
print('lost:', lost[:25])لماذا يتفوق الاختلاف على لوحة التحكم
الرسم البياني يخبرك بأن الخط تحرك. الاختلاف يخبرك أي النطاقات هي التي تحركت، وهو ما يمكنك اتخاذ إجراء بشأنه.
أدوات مثل Ahrefs و Semrush تظهر الروابط الجديدة والمفقودة في واجهتها الخاصة، وهذا جيد للأعمال العرضية. تبدأ المشكلة عند وجود خمسين موقعاً ومحلل واحد، حيث يستهلك طقس يوم الاثنين في فتح كل مشروع الصباح.
يحول السكربت هذا الطقس إلى ملف. كما يترك أرشيفاً مؤرخاً، بحيث يمكنك في شهر مارس الإجابة عن شكل الملف في أكتوبر دون التذرع بمزود الخدمة للحصول على تصدير.
سطر كرون
يعمل يوم الاثنين الساعة 07:00 بتوقيت الخادم ويرسل أي مخرجات إليك، ولهذا السبب لا يطبع السكربت شيئاً عندما لا يتغير شيء.
0 7 * * 1 cd /srv/linkwatch && for d in example.com rival-one.com rival-two.com; do python3 diff.py $d $(date +%F); done | mail -s 'link diff' your-team-listالتكلفة
| الإعداد | الاستدعاءات أسبوعياً | الرصيد المستخدم أسبوعياً | سنوياً |
|---|---|---|---|
| 1 نطاق، أقل من 1,000 نطاق مرجعي | 1 | 2 | حوالي $0.01 |
| 1 نطاق، 4,000 نطاق مرجعي | 4 | 8 | حوالي $0.04 |
| موقعك و5 منافسين، صفحة واحدة لكل منها | 6 | 12 | حوالي $0.06 |
| 50 موقعاً للعملاء، صفحة واحدة لكل منها | 50 | 100 | حوالي $0.52 |

نقاط يجب الانتباه إليها، حتى لا تقع فيها
تتغير اللقطات فقط عندما يتغير الفهرس. نقوم بالتحديث شهرياً تقريباً، لذا فإن معظم عمليات التشغيل الأسبوعية تعيد قائمة متطابقة ولا تطبع شيئاً. هذا مقصود. الصمت هو النتيجة المتوقعة.
الترقيم العميق محدود بـ 50,000 صف، وحدود الخمس صفحات في السكربت تبقيك بعيداً جداً عن هذا الحد. النطاقات الكبيرة تحتاج إلى خطة مختلفة: رتب باستخدام sort و order=desc على حقل يقبله الإجراء، وتوقف مبكراً بمجرد أن تصبح الصفوف غير مثيرة للاهتمام.
قم بتشغيل أول سحب يدوياً واقرأ ملف JSON. تحقق من أسماء الحقول. ثم قارن عدد الصفوف بالإجمالي للنطاقات المرجعية من استجابة واحدة لإجراء overview المجاني، إذا كانت تلك الاستجابة تحتوي على واحد.
عالج أخطاء HTTP 401 و 402 بشكل صريح، لأن 401 يعني مفتاحاً خاطئاً و 402 يعني وصول الرصيد إلى الصفر. كلاهما يجب أن يكون في إشعار الفشل الخاص بك. عندما يحدث اختلاف، اتبع دليل تشغيل الروابط المفقودة خلال الساعة الأولى.
قياس حملة روابط مشتراة، لقطة تلو الأخرى
شراء الروابط دون وجود خط أساس هو طريقة شائعة للنهاية بعدد لا يمكنك الدفاع عنه. خذ اللقطة قبل أن يصبح أول وضع حياً، واحتفظ بها بجانب كل لقطة تليها.
ثم قارن النطاقات المرجعية، وليس الأعداد الخام، لأن مانحاً واحداً يمكن أن يحمل العديد من الروابط. كل صف جديد في الاختلاف هو موقع يمكنك فتحه والتحقق منه يدوياً.
الحملة التي تبدو ثابتة لمدة شهر ليست فشلاً تلقائياً. تحديثات الفهرس بطيئة، لذا يتأخر الاختلاف عما حدث على الصفوف الحية، وهذا التأخر جزء من المنهجية.
كيف أقيس ما إذا كانت الروابط الخلفية المشتراة قد نجحت؟
ابدأ من تاريخ أول وضع وابحث عن صفوف المانحين التي تظهر بعده. احسب فقط تلك التي بقيت في اللقطتين التاليتين. ثم قارن هذا العدد بما دفعته مقابل الوضع، وسجل النتيجة بجانب التواريخ.
ماذا يجب أن تحتوي اللقطة قبل الشراء؟
قائمة كاملة بالنطاقات المرجعية، محفوظة بنفس تنسيق الملفات لكل تشغيل لاحق، مع التاريخ والنطاق في اسم الملف. خط أساس بتنسيق مختلف لا يمكن إجراء الاختلاف عليه، وهذا هو الخطأ الوحيد الذي لا يمكن إصلاحه لاحقاً.

كيف يبدو الأسبوع الصاخب في الاختلاف
أسبوع يحتوي على آلاف الصفوف الجديدة ليس دائماً أزمة. غالباً ما يكون ذلك بسبب برامج الحفر (scrapers). تقوم بنسخ الصفحات، وتخلق النسخ روابط لم يضعها أحد. تحقق من المانح أولاً قبل أن تفترض أي شيء حول موقعك الخاص.
رتب الصفوف الجديدة حسب جودة المانح قبل قراءتها. معظم القائمة تكون عادةً ضوضاء، ونظرة سريعة على الصفوف العليا تخبرك ما إذا كان الارتفاع يستحق بقية صباحك.
إذا كانت الصفوف عبارة عن صفحات من برامج الحفر، سجل العدد وتابع. إذا كانت مواقع حقيقية تحتوي على روابط لصفحاتك الرئيسية، اتبع خطوات الفرز.
لماذا يظهر الاختلاف مكاسب من الروابط المزعجة؟
لأن الاختلاف يبلغ عما ظهر في الفهرس، وليس ما اختاره الإنسان. الروابط المزعجة التي التقطها الفهرس تبدو مثل رابط تحريري حتى تفتح صفحة المانح وتقرأها.
كم مرة يجب أن أراجع المرشحين للإزالة؟
الشهرية تناسب إيقاع الفهرس بشكل أفضل من اليومية. المراجعة اليومية تظهر غالباً نفس القائمة مرة أخرى، بينما تمنحك المراجعة الشهرية وقتاً لإعادة زحف كل مرشح قبل الحكم عليه. صفحة فرز الروابط المزعجة تحتوي على خطوات اتخاذ القرار.
قبل أن تثق بالأول
- تم قراءة أول سحب يدوياً، صفًا تلو الآخر، لصفحة واحدة على الأقل.
- أسماء الحقول تتطابق مع الثوابت في بداية السكربت.
- كلا الخطأ 401 و 402 يفشلان المهمة بصراحة، وليس بصمت.
- مجلد اللقطات يتم نسخه احتياطياً أو مزامنته في مكان يمكنك استعادته منه.
- شاهد شخص آخر غير المؤلف التنبيه الأول ووافق على أنه يستحق رسالة.
حافظ على أرشيف اللقطات مفيداً لمدة عام
احتفظ بكل ملف مؤرخ، بما في ذلك تلك التي تبدو غير متغيرة. عام من اللقطات الأسبوعية يأخذ مساحة قرص قليلة، ويجيب عن أسئلة لم يطرحها أحد بعد، مثل متى ظهر المانح لأول مرة.
سمِّ الملفات بشكل متسق، مع النطاق والتاريخ والإجراء. الأسماء المختلطة تجعل سكربت الاختلاف يختار الزوج الخطأ، والزوج الخطأ ينتج تنبيهاً واثقاً وخاطئاً.
اضغط الملفات الأقدم مرة واحدة كل ربع سنة إذا كان المساحة مهمة. احتفظ بأحدث اثني عشر ملفاً غير مضغوط، حتى لا ينتظر التشغيل الأسبوعي الأرشيف.
كيف أجد أول لقطة ظهر فيها المانح؟
رتب الملفات المؤرخة حسب الاسم، ثم ابحث في كل منها عن نطاق المانح حتى تجد أول تطابق. حلقة قصيرة تفعل ذلك في بضعة أسطر، والنتيجة لا تكون أفضل من التسمية التي التزمت بها منذ البداية.
ماذا يجب أن أحذف، وماذا يجب أن أحتفظ؟
احتفظ بكل لقطة تم الاعتماد عليها لاتخاذ قرار، بالإضافة إلى الأولى والأخيرة من كل شهر. احذف الباقي فقط بعد التحقق من الأرشيف، لأن الملف المحذوف لا يمكنه الإجابة عن سؤال لاحقاً.
أرسل الاختلاف إلى المكان الذي يقرأه الناس بالفعل
الاختلاف الذي يسقط في مجلد غير مقروء لا قيمة له. المشاركة أفضل من الخصوصية. انشر النتيجة في القناة التي يراقبها فريقك بالفعل، واجعل الرسالة قصيرة بما يكفي لاتخاذ إجراء بنظرة خاطفة.
الرسالة الجيدة تذكر النطاق، وعدد الصفوف المفقودة والمكتسبة، والخطوة الأولى. تترك القائمة الكاملة، والتي تنتمي إلى الملف المرفق.
الصمت في الأسبوع الهادئ جزء من التصميم. إذا لم يتغير شيء، فلا يحتاج أحد إلى تذكير بأن شيئاً لم يتغير. اتركه كذلك. تظل القناة قابلة للقراءة للتنبيه الحقيقي التالي.
ماذا يجب أن تحتوي الرسالة؟
ثلاثة أشياء: اسم المانح أو المنافس، العددين، ورابط إلى الملف المحفوظ. عند إرفاق درجة، أضف أفضل Domain Rating بين الصفوف الجديدة، لأن نطاقاً قوياً واحداً يغير الأولوية أكثر من عشرة نطاقات ضعيفة.
من يحصل على إشعار الفشل؟
شخص يمكنه إصلاح المهمة، وليس فقط شخص يقرأ الرسائل. يتطلب الخطأ 401 مفتاحاً جديداً، ويتطلب الخطأ 402 تعبئة من صفحة الحساب. لا يتم حل أي منهما بالانتظار حتى يوم الاثنين التالي.
التوسيع
استبدل refdomains بـ backlinks عندما يحتاج التنبيه إلى رابط المانح والنص التأسيسي. تذكر تكلفة الرصيد المزدوج نفسها.
أضف bulk_dr لتقييم كل نطاق جديد، برصيد واحد لكل استدعاء يصل إلى 2,000 نطاق. ثم يمكن لرسالتك أن تقول "3 جدد، أفضل DR 72" بدلاً من قائمة مجردة.
لجداول بيانات Google، تعمل نفس سلسلة الاستعلام في Apps Script باستخدام UrlFetchApp. وللمنافسين، استخدم العتبات من تنبيهات الروابط الخلفية للمنافسين.