Skip to main content

WordPress – QTranslate and Yoast SEO

Translating Websites

A client’s WordPress website needed some love in regards to its SEO and as it is a multilingual site, it has QTranslate in combination with Yoast SEO.

For the most part these 2 plugins work great individually, but when combined there are some serious issues with SEO of foreign languages with regards to meta title and meta description tags for pages and posts.

After hunting around a little in the search engines I was terribly relieved to find a post on the WordPress forum, which provided some awesome insights.  However, there still appeared to be a problem with the title tags, and I was not able to determine a solution that I found satisfactory.

Some investigation seemed to come up with a suitable result.  So if you are having issues, consider following the instructions below and see how you get on.  I would really, really appreciate your feedback as I have only recently implemented this change so thorough testing has yet to be conducted.  Please note that the standard QTranslate syntax will need to be used for the meta title and description (e.g. <!–:en–>English<!–:–><!–:es–>Spanish<!–:–>).

From the forum post linked above, add the following into the functions.php script of the theme you are using:

// Enable qTranslate for WordPress SEO
function qtranslate_filter($text){
return __($text);
}

add_filter(‘wpseo_title’, ‘qtranslate_filter’, 10, 1);
add_filter(‘wpseo_metadesc’, ‘qtranslate_filter’, 10, 1);
add_filter(‘wpseo_metakey’, ‘qtranslate_filter’, 10, 1);

and that works fine with exception to the title tag (UPDATE 4th July 2013 – please double check this for the latest version of Yoast, as this might now be resolved).

For the title tag I made the change to the Yoast plugin file /wp-content/plugins/wordpress-seo/frontend/class-frontend.php, which included replacing the line:

return esc_html( strip_tags( stripslashes( apply_filters( ‘wpseo_title’, $title ) ) ) );

with:

return esc_html( strip_tags( stripslashes( apply_filters(  ‘wpseo_title’, wpseo_get_value( ‘title’ ) ) ) ) );

Save and check.  This appears to work fine for me, but please try for yourself and let me know your feedback in the comments section below.

Many thanks and happy translating. 🙂

UPDATE – 28th Nov 2012 (SUPERSEDED BY 4th JULY 2013 UPDATE BELOW)

The above solution works with Yoast versions 1.2.8.7 or older.

If your version of Yoast is 1.3 or newer the above solution will not work (your qTranslate code will be stripped out when you save).  We are currently working on a fix and will post it here when completed.  If you would like to be emailed once we’ve found a fix, just post “Please let me know when you’ve found the fix for Yoast version 1.3+” in the comments box below.

If you can’t wait until then, Yoast version 1.2.8.7 will do the trick in the meantime.

All versions of Yoast can be found here: https://wordpress.org/extend/plugins/wordpress-seo/developers/ 

UPDATE – 4th July 2013

Thanks to a comment from Solala (see in the comments section below), it would seem there’s now a fix for Yoast versions 1.3+!

I haven’t had a chance to personally test these options, so please backup your files before making these changes.

I would love to know which fix works for you – feel free to post your results in the comments section below.

(Thanks and kudos goes to Pedro Carvalho and b_machuel who posted their solutions here)

OPTION 1

In the file /wp-content/plugins/wordpress-seo/frontend/class-frontend.php replace the title() function with this:

function title( $title, $sepinput = ‘-‘, $seplocation = ” ) {
return $title;
}

OPTION 2

In the file /wp-content/plugins/wordpress-seo/frontend/class-frontend.php

} else if ( $this->is_home_posts_page() ) {
$title = $this->get_title_from_options( ‘title-home’ );
// START CHANGES
// Changed to tackle multilingual issue on posts page
} else if ( $this->is_posts_page() ) {
global $q_config;
$title = qtrans_use($q_config[‘language’], $this->get_content_title( get_post( get_option( ‘page_for_posts’ ) ) ), true);

// Added to tackle multilingual issue on pages
} else if ( is_page() ) {
global $q_config;
$title = qtrans_use($q_config[‘language’], $this->get_content_title(), true);
// END CHANGES
} else if ( is_singular() ) {
$title = $this->get_content_title();

OPTION 3

The awesome Yoast have added a solution to their FAQ which is identical to our original functions.php solution above, so this alone may now work with the latest version of Yoast without needing any of the other code alterations listed above (this is yet to be 100% confirmed by the user community).  Note that some users have had issues with the single quote marks (‘) used in some of the code solutions posted in the WordPress forums, so please double check your single quote marks, or if in doubt you can get the original code from Yoast’s FAQ.


WebHolism

We're an eco-loving, organic pixel creating, solar powered website conjurer who lives to help companies discover their awesome potential. Our specialities are WordPress websites and SEO. We also give really good hugs.

Comments (28)

Leave a Reply

Your email address will not be published. Required fields are marked *