بناء مسار لمعالجة توحيد روابط الفيديو

أجريت استعلاماً على قاعدة بيانات SQLite الخاصة بالإنتاج واكتشفت مشكلة ضخمة.

كان جدول الفيديوهات يحتوي على 41,283 صفاً، ولكن بـ 29,000 عنوان فريد فقط. كنا نقوم بتخزين نفس الفيديوهات عدة مرات.

لماذا حدث هذا؟ وصل نفس فيديو YouTube بتنسيقات روابط مختلفة:

• الروابط المختصرة: youtu.be/ID • روابط سطح المكتب: youtube.com/watch?v=ID • روابط الهاتف المحمول: m.youtube.com/watch?v=ID • فيديوهات Shorts: youtube.com/shorts/ID

فيديو واحد يعني أربعة صفوف في قاعدة البيانات وأربع صفحات ويب متطابقة تقريباً. أدى هذا إلى إهدار ميزانية الزحف (crawl budget) وظهور أخطاء في Google Search Console.

أنا أدير TrendVidStream. نحن نسحب البيانات الرائجة من ثماني مناطق مختلفة. وكل منطقة يمكن أن تظهر نفس الفيديو الرائج باستخدام أشكال روابط مختلفة.

لقد قمت ببناء مسار معالجة (pipeline) لإصلاح ذلك باستخدام PHP 8.4 و SQLite.

إليك كيفية عمل مسار المعالجة:

  1. الاستخراج (Extract): تحويل أي نوع من الروابط إلى معرف فيديو (video ID) ثابت مكون من 11 حرفاً.
  2. التوحيد (Normalize): إنشاء رابط موحد (canonical URL) واحد من ذلك المعرف.
  3. التحقق (Validate): إجراء فحوصات سريعة قبل تعديل قاعدة البيانات.
  4. التحديث أو الإدراج (Upsert): استخدام خاصية SQLite UPSERT لدمج البيانات بدلاً من إضافة صفوف جديدة.
  5. الإصدار (Emit): إضافة علامات التوحيد (canonical tags) وعمليات إعادة التوجيه 301 حتى تجد محركات البحث رابطاً واحداً.

قرارات تقنية رئيسية:

• استخدم قائمة سماح (allowlist) دقيقة للمضيفين (host). لا تستخدم مطابقة اللاحقة (suffix matching)، فهذا يمنع المخاطر الأمنية. • لا تقم أبداً بتحويل المعرفات (IDs) إلى أحرف صغيرة. معرفات YouTube حساسة لحالة الأحرف (case-sensitive)، وتحويلها إلى أحرف صغيرة سيؤدي إلى دمج فيديوهات مختلفة. • استخدم قيد الفرادة (UNIQUE constraint) على video_id. هذا هو أقوى دفاع لك ضد التكرار. • استخدم وضع SQLite WAL. هذا يجعل عمليات الكتابة سريعة وموثوقة.

النتيجة:

انخفض جدول الفيديوهات لدينا من 41,283 صفاً إلى 28,094 صفاً. لم نفقد أي فيديو. وانخفضت أخطاء Google Search Console من 412 إلى 9. أصبحت نتائج البحث أكثر نظافة لأننا توقفنا عن عرض نفس الفيديو أربع مرات.

الدرس بسيط: عندما تقوم بتجميع البيانات من مصادر متعددة، قم ببناء الهوية (identity) في نظامك أولاً. استخرج معرفاً ثابتاً، وافرضه باستخدام قيود قاعدة البيانات، واجعل كل عملية كتابة متماثلة (idempotent).

لست بحاجة إلى أدوات معقدة. PHP و SQLite كافيان.

المصدر: https://dev.to/ahmet_gedik778845/building-a-video-url-canonicalization-pipeline-in-php-84-with-sqlite-32ne