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: http://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.

This entry was posted in WordPress on by .

About 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 green web design and ethical SEO. We also give really good hugs.

Leave a Reply

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

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

26 thoughts on “WordPress – QTranslate and Yoast SEO

    1. Sara Thornton

      Hi Theo,

      Thanks for the update – sometimes this can be a cached page issue (i.e. not seeing the newly updated page), and often clearing your Joomla cache, and/or force refreshing your browser (CTRL + F5 a few times) can instantly fix the problem.

      Glad it all got sorted,
      Sara

      Reply
  1. Ravi

    Hi there Sara

    Been trying the above fix but wp keeps stripping away the qTranslate syntax from the Yoast plugin :(
    Any ideas?

    Kind regards
    Ravi

    Reply
    1. Sara Thornton

      Hi Ravi,

      We’ve carried out some testing, and it would seem that the Yoast version is the cause.
      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 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: http://wordpress.org/extend/plugins/wordpress-seo/developers/

      I hope this helps,
      Sara

      Reply
    1. Sara Thornton

      Thanks for your post Solala!

      I’ve checked out the links and users do indeed seem to now have success with Yoast version 1.3+. Hurrah!

      I haven’t had a chance to test this personally yet, however any feedback would be warmly welcome to help any future people who stumble across this page.

      Many thanks for your post!

      Best wishes,
      Sara

      Reply
    1. Serge

      I really have a hard time with this plug-in.
      You had show us how to modify the code in Yoast plug-in.
      Our web creator made the modifications proposed here.
      But after this, how to add an English title and description to a page created in French ?
      This is supposed to be an easy plug-in for dummies like me.

      Reply
      1. Sara Thornton

        Hi Serge,

        Thanks for your post.

        If you’ve got both qTranslate and Yoast installed, and you’ve applied the fixes mentioned in this article, then you should be able to just pop the qTranslate text into the Yoast Title and Meta Description boxes that should be located underneath the page that you are editing.

        Put qTranslate Title in the Yoast Title box
        and
        qTranslate description in the Yoast Description box

        Any problems, just let me know.

        Thanks,
        Sara

        Reply
        1. Omnigraf

          Hi there,

          I applied the official modifications proposed by Yoast to the functions.php file, then put “English titleItalian title” into the Yoast title and description boxes, but right after saving the changes, all I get is “English titleItalian title” one after each other and anything else happen.

          Any ideas?

          Reply
  2. joris

    Hi,

    if I follow the instructions above the EnglishSpanish tags are being stripped when saving, so the title tag and meta contains all languages instead of the right one.

    Reply
  3. Nico

    I added the code to the functions.php file and ALMOST everything is working. The problem is the Meta Tittle is being display twice in the same language as you can see in my site(www.chacrasdecoria.travel).

    Anyone know how to solve it?

    Thanks!

    Reply
    1. Sara Thornton

      Hi Nico,

      Thanks for your post. Did you follow the /wp-content/plugins/wordpress-seo/frontend/class-frontend.php change also, or the Option 1, 2 or 3 from the 4th July 2013 update above (depending on your version of Yoast)?

      Thanks,
      Sara

      Reply