ਵੀਡੀਓ URL ਕੈਨੋਨੀਕਲਾਈਜ਼ੇਸ਼ਨ ਪਾਈਪਲਾਈਨ ਬਣਾਉਣਾ
ਮੈਂ ਆਪਣੇ ਪ੍ਰੋਡਕਸ਼ਨ SQLite ਡੇਟਾਬੇਸ 'ਤੇ ਇੱਕ ਕੁਐਰੀ ਚਲਾਈ ਅਤੇ ਇੱਕ ਵੱਡੀ ਸਮੱਸਿਆ ਮਿਲੀ।
ਵੀਡੀਓਜ਼ (videos) ਟੇਬਲ ਵਿੱਚ 41,283 ਰੋਅ (rows) ਸਨ, ਪਰ ਸਿਰਫ਼ 29,000 ਵਿਲੱਖਣ (unique) ਟਾਈਟਲ ਸਨ। ਅਸੀਂ ਇੱਕੋ ਹੀ ਵੀਡੀਓਜ਼ ਨੂੰ ਕਈ ਵਾਰ ਸਟੋਰ ਕਰ ਰਹੇ ਸੀ।
ਇਹ ਕਿਉਂ ਹੋਇਆ? ਇੱਕੋ YouTube ਵੀਡੀਓ ਵੱਖ-ਵੱਖ URL ਫਾਰਮੈਟਾਂ ਵਿੱਚ ਆ ਰਹੀ ਸੀ:
• ਸ਼ਾਰਟ ਲਿੰਕਸ: youtu.be/ID • ਡੈਸਕਟੌਪ ਲਿੰਕਸ: youtube.com/watch?v=ID • ਮੋਬਾਈਲ ਲਿੰਕਸ: m.youtube.com/watch?v=ID • ਸ਼ੋਰਟਸ: youtube.com/shorts/ID
ਇੱਕ ਵੀਡੀਓ ਦਾ ਮਤਲਬ ਸੀ ਡੇਟਾਬੇਸ ਦੀਆਂ ਚਾਰ ਰੋਅ ਅਤੇ ਚਾਰ ਲਗਭਗ ਇੱਕੋ ਜਿਹੀਆਂ ਵੈੱਬ ਪੇਜਾਂ। ਇਸ ਨਾਲ ਮੇਰਾ ਕਰੌਲ ਬਜਟ (crawl budget) ਬਰਬਾਦ ਹੋ ਗਿਆ ਅਤੇ Google Search Console ਵਿੱਚ ਗਲਤੀਆਂ (errors) ਦਿਖਾਈ ਦੇਣ ਲੱਗੀਆਂ।
ਮੈਂ TrendVidStream ਚਲਾਉਂਦਾ ਹਾਂ। ਅਸੀਂ ਅੱਠ ਵੱਖ-ਵੱਖ ਖੇਤਰਾਂ ਤੋਂ ਟ੍ਰੈਂਡਿੰਗ ਡੇਟਾ ਕੱਢਦੇ ਹਾਂ। ਹਰ ਖੇਤਰ ਵੱਖ-ਵੱਖ URL ਰੂਪਾਂ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕੋ ਜਿਹੀ ਵਾਇਰਲ ਵੀਡੀਓ ਦਿਖਾ ਸਕਦਾ ਹੈ।
ਮੈਂ ਇਸ ਨੂੰ ਠੀਕ ਕਰਨ ਲਈ PHP 8.4 ਅਤੇ SQLite ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇੱਕ ਪਾਈਪਲਾਈਨ ਬਣਾਈ।
ਪਾਈਪਲਾਈਨ ਇਸ ਤਰ੍ਹਾਂ ਕੰਮ ਕਰਦੀ ਹੈ:
- ਕੱਢਣਾ (Extract): ਕਿਸੇ ਵੀ URL ਵੇਰੀਐਂਟ ਨੂੰ ਇੱਕ ਸਥਿਰ 11-ਅੱਖਰਾਂ ਵਾਲੀ ਵੀਡੀਓ ID ਵਿੱਚ ਬਦਲੋ।
- ਨਾਰਮਲਾਈਜ਼ (Normalize): ਉਸ ID ਤੋਂ ਇੱਕ ਸਿੰਗਲ ਕੈਨੋਨੀਕਲ URL ਬਣਾਓ।
- ਵੈਲੀਡੇਟ (Validate): ਡੇਟਾਬੇਸ ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ ਤੇਜ਼ੀ ਨਾਲ ਚੈੱਕ ਕਰੋ।
- ਅੱਪਸਰਟ (Upsert): ਨਵੀਆਂ ਰੋਅ ਜੋੜਨ ਦੀ ਬਜਾਏ ਡੇਟਾ ਨੂੰ ਮਰਜ ਕਰਨ ਲਈ SQLite UPSERT ਦੀ ਵਰਤੋਂ ਕਰੋ।
- ਐਮਿਟ (Emit): ਕੈਨੋਨੀਕਲ ਟੈਗਸ ਅਤੇ 301 ਰੀਡਾਇਰੈਕਟਸ ਜੋੜੋ ਤਾਂ ਜੋ ਸਰਚ ਇੰਜਣਾਂ ਨੂੰ ਇੱਕ ਹੀ URL ਮਿਲੇ।
ਮੁੱਖ ਤਕਨੀਕੀ ਫੈਸਲੇ:
• ਇੱਕ ਸਹੀ ਹੋਸਟ ਐਲੋਲਿਸਟ (allowlist) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਸਫਿਕਸ ਮੈਚਿੰਗ (suffix matching) ਦੀ ਵਰਤੋਂ ਨਾ ਕਰੋ। ਇਹ ਸੁਰੱਖਿਆ ਜੋਖਮਾਂ ਨੂੰ ਰੋਕਦਾ ਹੈ। • ID ਨੂੰ ਕਦੇ ਵੀ ਲੋਅਰਕੇਸ (lowercase) ਨਾ ਕਰੋ। YouTube ID ਕੇਸ-ਸੈਂਸਿਟਿਵ (case-sensitive) ਹੁੰਦੇ ਹਨ। ਉਹਨਾਂ ਨੂੰ ਲੋਅਰਕੇਸ ਕਰਨ ਨਾਲ ਵੱਖ-ਵੱਖ ਵੀਡੀਓਜ਼ ਮਰਜ ਹੋ ਜਾਂਦੀਆਂ ਹਨ। • video_id 'ਤੇ ਇੱਕ UNIQUE ਕੰਸਟ੍ਰੇਂਟ (constraint) ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਡੁਪਲੀਕੇਟਾਂ ਦੇ ਵਿਰੁੱਧ ਤੁਹਾਡਾ ਸਭ ਤੋਂ ਮਜ਼ਬੂਤ ਬਚਾਅ ਹੈ। • SQLite WAL ਮੋਡ ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਹ ਲਿਖਣ (writes) ਦੀ ਪ੍ਰਕਿਰਿਆ ਨੂੰ ਤੇਜ਼ ਅਤੇ ਭਰੋਸੇਮੰਦ ਬਣਾਉਂਦਾ ਹੈ।
ਨਤੀਜਾ:
ਸਾਡੇ ਵੀਡੀਓ ਟੇਬਲ ਵਿੱਚ ਰੋਅ 41,283 ਤੋਂ ਘਟ ਕੇ 28,094 ਰੋਅ ਰਹਿ ਗਈਆਂ। ਅਸੀਂ ਇੱਕ ਵੀ ਵੀਡੀਓ ਨਹੀਂ ਗਵਾਈ। Google Search Console ਦੀਆਂ ਗਲਤੀਆਂ 412 ਤੋਂ ਘਟ ਕੇ 9 ਰਹਿ ਗਈਆਂ। ਸਰਚ ਨਤੀਜੇ ਵਧੇਰੇ ਸਾਫ਼ ਹੋ ਗਏ ਕਿਉਂਕਿ ਅਸੀਂ ਇੱਕੋ ਵੀਡੀਓ ਨੂੰ ਚਾਰ ਵਾਰ ਦਿਖਾਉਣਾ ਬੰਦ ਕਰ ਦਿੱਤਾ।
ਸਬਕ ਸਧਾਰਨ ਹੈ: ਜਦੋਂ ਤੁਸੀਂ ਬਹੁਤ ਸਾਰੇ ਸਰੋਤਾਂ ਤੋਂ ਡੇਟਾ ਇਕੱਠਾ ਕਰਦੇ ਹੋ, ਤਾਂ ਪਹਿਲਾਂ ਆਪਣੇ ਸਿਸਟਮ ਵਿੱਚ ਪਛਾਣ (identity) ਬਣਾਓ। ਇੱਕ ਸਥਿਰ ID ਕੱਢੋ, ਡੇਟਾਬੇਸ ਕੰਸਟ੍ਰੇਂਟਸ ਨਾਲ ਇਸ ਨੂੰ ਲਾਗੂ ਕਰੋ, ਅਤੇ ਹਰ ਲਿਖਣ (write) ਨੂੰ ਆਈਡੈਂਪੋਟੈਂਟ (idempotent) ਬਣਾਓ।
ਤੁਹਾਨੂੰ ਗੁੰਝਲਦਾਰ ਟੂਲਸ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। PHP ਅਤੇ SQLite ਹੀ ਕਾਫ਼ੀ ਹਨ।
