Qtranslate-x проблема з hreflang=”x-default”
При роботі з SEO оптимізаторами, наштовхнувся на дивну роботу мовного плагіна Qtranslate-x. Це напевне найзручніший плагін для створення кількох мов для сайту, але він не найкращий в плані пошукової оптимізації.
Проблема виявилась в тому, що він робить одну з мов стандартною, а пошуковик (google), бачить це як не визначену мову. Крім того, з головної мови сайту, він створює дублі з приставкою цієї мови в кінці, а потім переадресовує користувача на основну сторінку. Приклад коду, який генерується в метатеги:
1 2 3 |
<link hreflang="ua" href="https://figli.pp.ua/ua/" rel="alternate" /> <link hreflang="en" href="https://figli.pp.ua/en/" rel="alternate" /> <link hreflang="x-default" href="https://figli.pp.ua/" rel="alternate" /> |
Звідси потрібно прибрати “x-default”, а замість нього вписати uk_UA, відповідно перший рядок, де hreflang=”ua”, просто видалити. А також модифікувати “en” на “en_UA”. Де “uk” та “en” — вказують на мову сторінки, а “UA” — країну, до якої прив’язаний ресурс.
Рішення складається з кількох кроків:
- шукаємо файл, що генерує вивід цих метатегів. Розташований він тут: /wp-content/plugins/qtranslate-x/qtranslate_frontend.php;
- Шукаємо функцію, що відповідає за вставку qtranxf_wp_head();
- копіюємо функцію і переписуємо її в файлі function.php активної теми.
Важливо перед тим, як функцію переписати, її потрібно деактивувати. Загалом код виглядатиме так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
/* видаляємо стандартну функцію вставки hreflang*/ remove_action( 'wp_head', 'qtranxf_wp_head' ); /* переписуємо функцію вставки hreflang*/ function figli_qtranxf_wp_head(){ global $q_config; if( $q_config['header_css_on'] ){ echo '<style type="text/css">' . PHP_EOL .$q_config['header_css'].'</style>'. PHP_EOL; } do_action('qtranslate_head_add_css');//not really needed? // skip the rest if 404 if(is_404()) return; // set links to translations of current page foreach($q_config['enabled_languages'] as $lang) { if(!empty($q_config['locale_html'][$lang])){ $hreflang = $q_config['locale_html'][$lang]; }else{ $hreflang = $lang; } //if($language != qtranxf_getLanguage())//standard requires them all if($hreflang=="ua"){ echo '<link hreflang="uk-UA" href="'.qtranxf_convertURL('',$q_config['default_language']).'" rel="alternate" />'.PHP_EOL; } elseif($hreflang=="en"){ echo '<link hreflang="en-UA" href="'.qtranxf_convertURL('',$lang,false,true).'" rel="alternate" />'.PHP_EOL; } else{ echo '<link hreflang="'.$hreflang.'" href="'.qtranxf_convertURL('',$lang,false,true).'" rel="alternate" />'.PHP_EOL; } } //https://support.google.com/webmasters/answer/189077 //echo '<link hreflang="x-default" href="'.qtranxf_convertURL('',$q_config['default_language']).'" rel="alternate" />'.PHP_EOL; //qtranxf_add_css();// since 3.2.5 no longer needed } add_action('wp_head', 'figli_qtranxf_wp_head'); |
Логіка тут елементарна! Рядок виводу x-default — закоментовуємо, а для модифікації мов, ставимо умову if($hreflang==”ua”), що визначає яка саме завантажена. В результаті маємо на сторінці такий код:
1 2 |
<link hreflang="uk-UA" href="https://figli.pp.ua/" rel="alternate" /> <link hreflang="en-UA" href="https://figli.pp.ua/en/" rel="alternate" /> |
Те, що і було потрібно.