Membangun Pipeline Kanonisasi URL Video
Saya menjalankan kueri pada database SQLite produksi saya dan menemukan masalah besar.
Tabel videos memiliki 41.283 baris, tetapi hanya 29.000 judul unik. Kami menyimpan video yang sama berkali-kali.
Mengapa hal ini terjadi? Video YouTube yang sama datang dalam format URL yang berbeda:
• Tautan pendek: youtu.be/ID • Tautan desktop: youtube.com/watch?v=ID • Tautan seluler: m.youtube.com/watch?v=ID • Shorts: youtube.com/shorts/ID
Satu video berarti empat baris database dan empat halaman web yang hampir identik. Hal ini membuang-buang anggaran perayapan (crawl budget) saya dan memicu kesalahan di Google Search Console.
Saya menjalankan TrendVidStream. Kami menarik data tren dari delapan wilayah berbeda. Setiap wilayah dapat menampilkan video viral yang sama menggunakan format URL yang berbeda.
Saya membangun sebuah pipeline untuk memperbaiki ini menggunakan PHP 8.4 dan SQLite.
Berikut adalah cara kerja pipeline tersebut:
- Extract: Ubah varian URL apa pun menjadi ID video 11 karakter yang stabil.
- Normalize: Buat satu URL kanonik tunggal dari ID tersebut.
- Validate: Jalankan pemeriksaan cepat sebelum menyentuh database.
- Upsert: Gunakan SQLite UPSERT untuk menggabungkan data alih-alih menambah baris baru.
- Emit: Tambahkan tag kanonik dan pengalihan (redirect) 301 agar mesin pencari menemukan satu URL.
Keputusan teknis utama:
• Gunakan daftar putih (allowlist) host yang tepat. Jangan gunakan pencocokan akhiran (suffix matching). Ini mencegah risiko keamanan.
• Jangan pernah mengubah ID menjadi huruf kecil. ID YouTube bersifat peka huruf (case-sensitive). Mengubahnya menjadi huruf kecil akan menggabungkan video yang berbeda.
• Gunakan batasan (constraint) UNIQUE pada video_id. Ini adalah pertahanan terkuat Anda terhadap duplikasi.
• Gunakan mode SQLite WAL. Ini membuat proses penulisan menjadi cepat dan andal.
Hasilnya:
Tabel video kami turun dari 41.283 baris menjadi 28.094 baris. Kami tidak kehilangan satu video pun. Kesalahan di Google Search Console turun dari 412 menjadi 9. Hasil pencarian menjadi lebih bersih karena kami berhenti menampilkan video yang sama sebanyak empat kali.
Pelajarannya sederhana: saat Anda mengumpulkan data dari banyak sumber, bangunlah identitas ke dalam sistem Anda terlebih dahulu. Ekstrak ID yang stabil, terapkan dengan batasan database, dan buat setiap proses penulisan bersifat idempotent.
Anda tidak memerlukan alat yang rumit. PHP dan SQLite sudah cukup.
