Making BuddyPress compatible with the WordPress SEO plugin from Yoast

wordpress_seo_buddypress

The WordPress SEO plugin from Yoast is pretty much the only SEO solution you need for your WordPress site. It has become a default plugin in all my WordPress and BuddyPress projects. The only issue is that the plugin hooks into the common wp_title template tag to rewrite your site URLs to a custom title (that you specify from the WordPress SEO settings). BuddyPress does not use this tag, and thus the URL rewriting does not work. Below is a quick snippet that will fix this problem for you.

Find the following code in header.php of your Child Theme (around line 9):

<title><?php bp_page_title() ?></title>

And replace it with the following snippet:

<?php if(!bp_is_blog_page()){ ?>
 <title><?php bp_page_title() ?></title>
<?php } else { ?>
 <title><?php wp_title('') ?></title>
<?php } ?>

WordPress SEO is now working as it should. Enjoy!

BuddyPress Hosting Guide Looking for quality BuddyPress hosting? We will guide you through all the available hosting options and help you find the best webhost for your next BuddyPress project!

Something about bowe

BuddyPress fanatic, WordPress Theme designer and MultiSite community builder. Proud co-founder of PressCrew. Loves to use awesome in every sentence. Often described as a Dutch Treehugging Hippie.

33 Responses to Making BuddyPress compatible with the WordPress SEO plugin from Yoast

  1. Amisharma132 April 5, 2011 at 7:42 pm #

    gd information…….

  2. JoSe May 12, 2011 at 8:30 pm #

    I am using a BP child of theme hybrid framework. At header.php shows

    Should I replace “” with “” in the code above ?

    Thanx

  3. JoSe May 12, 2011 at 8:31 pm #

  4. JoSe May 12, 2011 at 8:31 pm #

    Now, how do I paste code in here ?

  5. Rahul May 21, 2011 at 6:36 pm #

    A very good list. I really like the list as I am always searching for additional plugins to make my site more effective.

    thank you for this valuable info..

    • bowe May 22, 2011 at 8:24 pm #

      You’re welcome :)

  6. Neo May 23, 2011 at 1:20 pm #

    Thanks!
    Personaly, i use SeoPress in my web site.

  7. Greg Fielding June 8, 2011 at 11:02 pm #

    Bowe,

    Is there a way to add specific sitemap support for the buddypress activity stream? For my site, the activity stream, and member’s profile pages should be my highest priorities. However, with yoast seo and this snip, neither show in any of the sitemaps.

  8. Aaron July 18, 2011 at 4:24 am #

    Thanks for the quick fix! Yoast is the man and glad you found a buddypress workaround for his SEO plugin.

  9. Kevin July 25, 2011 at 2:43 pm #

    It’s not working for the activity stream:
    Submitted URLs
    23,522
    967 URLs in web index

    URLs not followed
    When we tested a sample of URLs from your Sitemap, we found that some URLs redirect to other locations. We recommend that your Sitemap contain URLs that point to the final destination (the redirect target) instead of redirecting to another URL.

    Is there any way to fix this?

  10. Laurent July 26, 2011 at 8:20 pm #

    Thanks for the trick ! I just migrate from All In One SEO to Yoast Wordrpress and as I’m using BuddyPress I’m very happy ;-)

  11. Ronald September 2, 2011 at 9:15 am #

    Great, just what I needed!!
    Thx!!

  12. Herb Miller October 27, 2011 at 4:51 pm #

    I had a similar problem with themes generated using Artisteer. My solution was to write a function called bw_wp_title(). This works out what to do depending on whether or not WordPress SEO is activated.

    /**
    * return a nice SEO title
    * taking into account which plugins are being used
    */
    if ( !function_exists( ‘bw_wp_title’ )) {
    function bw_wp_title() {
    if ( class_exists( ‘WPSEO_Frontend’ )) {
    $title = wp_title(”, false );
    }else {
    $title = wp_title( ‘|’, false, ‘right’ );
    $title .= get_bloginfo( ‘name’ );
    }
    return $title;
    }
    }

    I included this in functions.php for the ( child ) theme. I then changed header.php to echo the result of bw_wp_title(), commenting out the original code.
    Note: The bw_wp_title function is wrapped in “if not function exists” so that I can implement the same or better version of this function in my oik plugin.

  13. Wiloooo November 9, 2011 at 9:37 pm #

    GREAT ! thank’s you ;)

  14. Plugín de Suscriptores para WordPres February 6, 2012 at 9:05 am #

    Wow, awesome blog format! How long have you been blogging for? you made blogging glance easy. The entire look of your web site is wonderful, as smartly as the content material!

  15. Keshav Saini February 29, 2012 at 4:27 pm #

    This fix isn’t working for my site http://www.environmentabout.com/community

    When I change I code in header, all the pages works perfectly but Activity, Groups and Members pages. These pages are mixing up the titles.

    How do I prevent buddypress specific pages from being rewritten by this plugin?

  16. how to get rankedo n page 1 of google April 16, 2012 at 6:54 am #

    Ola! Bowe,
    This might be off topic, however WordPress SEO is not difficult provided a simple process is followed. When considering WordPress SEO a few common questions are:
    Great Job!

    • Auth May 30, 2012 at 11:53 am #

      Good day! I simply would like to give an emrnoous thumbs up for the great info you will have right here on this post. I will likely be coming again to your weblog for extra soon.

  17. social May 5, 2012 at 4:48 am #

    If you could email me with some hints & tips about how you made this blog look this good , I would appreciate it!

    • She June 1, 2012 at 12:51 am #

      Bonjour, This blog is very interesting and fun to read. I am a enouumors follower of the topics blogged about. I also love reading the replies, but it seems like that most of people need to stay on topic to try and give more to the original topic. I would also encourage all of you to add this website to your favourite website to help get the word out. Warm Regards

  18. reddit May 5, 2012 at 4:49 am #

    An cool blog post right there mate . Thank you for that !

  19. click here May 5, 2012 at 4:49 am #

    I have got one suggestion for your webpage. It looks like there are a couple of cascading stylesheet problems when opening a selection of webpages in google chrome and internet explorer. It is operating fine in internet explorer. Possibly you can double check this.

    • Zheng June 1, 2012 at 5:20 am #

      May 8, 2012Currently I am wiorkng on Buddypress User Account Type PRO, just after that I’ll start wiorkng on this.so, it may take 3.5 more weeks to release it.hmm.. about multiple user community, it is not hard to do with Buddypress. basically, buddypress is built to do that. it doesn’t remove any wordpres feature, just extend it to a multiple user community. after installing Buddypress, Authors can write and publish post just like before, so.. it is not hard anymore.Thanks

  20. reddit May 5, 2012 at 4:50 am #

    Do youve a spam problem on this internet site; I also am a blogger, and I was questioning your situation; we now have developed some great techniques and we are looking to trade solutions with other folks, be positive to blast me an e-mail if planning to pursue.

  21. Lucas Garvin July 14, 2012 at 3:11 am #

    You are my hero! Awesomeness!

  22. Walmar Andrade October 8, 2012 at 4:16 pm #

    Well, your trick is not working with the recent versions of Buddypress (1.6.1) and WordPress SEO by Yoast (1.2.8.5). I figured out how to solve it at my site (www.mude.nu). It´s not a elegant solution, because I´m not a programmer, but it´s working. I´m sharing to see if I get some improvements.

    So, to make Buddypress titles work while WordPress SEO by Yoast plugin is activated, just add this to your theme´s functions.php:


    add_filter('wpseo_title', 'mood_bp_title');
    function mood_bp_title($title) {
    if ( function_exists('bp_current_component') && bp_current_component() ) {
    global $bp;

    // If this is not a BP page, just return the title produced by WP
    if ( bp_is_blog_page() )
    return $title;

    // If this is the front page of the site, return WP's title
    if ( is_front_page() || is_home() )
    return $title;

    $title = '';

    // Displayed user
    if ( bp_get_displayed_user_fullname() && !is_404() ) {

    // Get the component's ID to try and get it's name
    $component_id = $component_name = bp_current_component();

    // Use the actual component name
    if ( !empty( $bp->{$component_id}->name ) ) {
    $component_name = $bp->{$component_id}->name;

    // Fall back on the component ID (probably same as current_component)
    } elseif ( !empty( $bp->{$component_id}->id ) ) {
    $component_name = $bp->{$component_id}->id;
    }

    // Construct the page title. 1 = user name, 2 = seperator, 3 = component name
    $title = strip_tags( sprintf( _x( '%1$s %3$s %2$s', 'Construct the page title. 1 = user name, 2 = component name, 3 = seperator', 'buddypress' ), bp_get_displayed_user_fullname(), ucwords( $component_name ), $sep ) );

    // A single group
    } elseif ( bp_is_active( 'groups' ) && !empty( $bp->groups->current_group ) && !empty( $bp->bp_options_nav[$bp->groups->current_group->slug] ) ) {
    $subnav = isset( $bp->bp_options_nav[$bp->groups->current_group->slug][bp_current_action()]['name'] ) ? $bp->bp_options_nav[$bp->groups->current_group->slug][bp_current_action()]['name'] : '';
    // translators: "group name | group nav section name"
    $title = sprintf( __( '%1$s | %2$s', 'buddypress' ), $bp->bp_options_title, $subnav );

    // A single item from a component other than groups
    } elseif ( bp_is_single_item() ) {
    // translators: "component item name | component nav section name | root component name"
    $title = sprintf( __( '%1$s | %2$s | %3$s', 'buddypress' ), $bp->bp_options_title, $bp->bp_options_nav[bp_current_item()][bp_current_action()]['name'], bp_get_name_from_root_slug( bp_get_root_slug() ) );

    // An index or directory
    } elseif ( bp_is_directory() ) {
    if ( !bp_current_component() ) {
    $title = sprintf( __( '%s Directory', 'buddypress' ), bp_get_name_from_root_slug() );
    } else {
    $title = sprintf( __( '%s Directory', 'buddypress' ), bp_get_name_from_root_slug() );
    }

    // Sign up page
    } elseif ( bp_is_register_page() ) {
    $title = __( 'Create an Account', 'buddypress' );

    // Activation page
    } elseif ( bp_is_activation_page() ) {
    $title = __( 'Activate your Account', 'buddypress' );

    // Group creation page
    } elseif ( bp_is_group_create() ) {
    $title = __( 'Create a Group', 'buddypress' );

    // Blog creation page
    } elseif ( bp_is_create_blog() ) {
    $title = __( 'Create a Site', 'buddypress' );
    }

    // Some BP nav items contain item counts. Remove them
    $title = preg_replace( '|[0-9]+|', '', $title ); }

    return apply_filters( 'bp_modify_page_title', $title . ' ' . $sep . ' ', $title, $sep, $seplocation );
    }

  23. Raphael C. January 23, 2013 at 2:50 am #

    Can anyone tell me if this enables the indexing of my group forums topics in sitemap.xml? Regards!

    • Bowe Frankemo February 14, 2013 at 10:10 pm #

      No it does not. Since BuddyPress does not use custom post types for groups, the sitemap will not pick them up.

  24. ravinder singh November 11, 2013 at 1:56 am #

    Thanks, A very useful information .

  25. Rashid Manhas November 19, 2013 at 8:38 pm #

    Great Blog! Thanks

Trackbacks/Pingbacks

  1. [bp] and WordPress SEO titles - WP-Pompey - October 27, 2011

    [...] As appears to be often the case, I developed my own fix before finding that someone else had done the same sort of thing. e.g. making BuddyPress compatible with the WordPress SEO plugin [...]

  2. carmichael - May 9, 2012

    abrasion…

    These instructions seem easy.However, I have just a question or two.In, “To Publish Content on your Website”, you wrote, “If your network has a name resolution system (typically DNS), then visitors can simply type your computer name in the address b…

Leave a Reply