למה הוורדפרס שלך יוצר תוכן כפול ואיך לתקן את זה?
לאחרונה גילינו בעיה מוזרה במערכת וורדפרס שקשורה לדרך שבה וורדפרס מתמודדת עם קישורים באתר.
הבעיה מפריעה בעיקר למקדמים ואנשי SEO, אני מניח שחלק מכם יראו בזה באג ואחרים פיצ’ר (כמאמר חז”ל על תקלות נפוצות : זהו לא באג אלא פיצ’ר).
תיאור הבעיה:
כאשר אתה גולש אל כתובת של פוסט באתר, לדוגמה הפוסט הנוכחי שאתה קורא כרגע שכתובתו היא:
https://ocw.co.il/term-prob/
הכתובת מורכבת מ:
site-url/post-slug
אם נפתח ביניהם עוד סלש ונכתוב כאן בצורה כזו:
site-url/random-text/post-slug
לדוגמה:
https://ocw.co.il/asdasdasd/term-prob/
תגלו שוורדפרס מזהה לבד שאתם מתכוונים לפוסט הנוכחי והוא יעביר אתכם אליו בעזרת redirect
מה קורה בקטגוריה או בכל טקסונומיה אחרת?
הכתובת מורכבת מ:
site-url/taxonomy/term-slug
לדוגמה:
https://ocw.co.il/category/%d7%91%d7%a0%d7%99%d7%99%d7%aa-%d7%90%d7%aa%d7%a8%d7%99%d7%9d/
אם נפתח כאן עוד סלש ונכתוב בצורה כזו:
site-url/taxonomy/random-text/term-slug
במקרה הזה וורדפרס לא יעביר אותך אל עמוד הקטגוריה הנכון אלא יציג לך את העמוד עצמו של הקטגוריה על הכתובת השגויה.
זה עלול לגרום לריבוי כתובות ולתוכן כפול באתר.
(אם יש לך yoast אז הוא יוצר קנוניקל בצורה אוטומטית וזה לפחות יתקן את הרושם של התוכן הכפול עבור מנועי החיפוש).
פיתרון הבעיה
בינתיים, עד שמישהו מהמתכנתים והתורמים של וורדפרס ישים לב ויתקן את הבאג (או הפיצ’ר, תלוי איך מסתכלים על זה),
כתבנו קוד שעושה 301 רידיירקט מהקישור השגוי לקישור הנכון:
function ocw_redirect_tax() { if(isset(get_queried_object()->term_id) && $term_id = get_queried_object()->term_id){ $actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $real_url = get_term_link($term_id,get_query_var( 'taxonomy' )); if($actual_link != $real_url){ wp_redirect($real_url,301); } die; } } add_action( 'template_redirect', 'ocw_redirect_tax' );
את הקוד שמים בקובץ הfunctions.php של התבנית.
יש לך אתר וורדפרס? מוזמן לשלוח למקדם\למתכנת שלך.
מוזמנים לשתף.
כתיבת תגובה