This post describes how to fix duplicate meta and title tag content when spanning multiple home pages in WordPress. This isn’t a topic I normally cover here at www.iceflatline.com, but after searching for a solution to this problem for this site and continually encountering advice such as just add a plugin, I decided to post how I fixed this problem without encumbering my site with yet another WordPress plugin or other solutions.
The Problem
Like each post here at iceflatline.com, my index or main “home” page contains its own unique description and keywords meta tags and title tag content. WordPress allows me to determine the number of posts displayed on my home page (I typically choose five). Once this limit is reached, my WordPress theme automatically generates an “Older Entries” link at the bottom of the page, allowing the reader to navigate to a another page containing the previous five posts, and so on. While this is a helpful navigation feature for the reader, to a search engine like Google it’s another URL that contains the same meta and title tag content as that of the main home page. For example, I use the following content for my home page description and keywords meta tags:
1 2 3 |
<meta name="description" content="Here at www.iceflatline.com you will find how-tos, tutorials, tips, guides, news, reviews and commentary for users of Linux, Unix and Windows"> <meta name="keywords" content="howto, install, configure, setup, server, review, games, network, ubuntu, crunchbang, fedora, linux, unix, windows"> |
Left unchanged, however, each Older Entries link will also contain the same description and keywords content. Consequently, tools like Google’s Webmaster Tools will complain that it has detected duplicate meta descriptions. This issue likely won’t prevent your site from appearing in search results, but paying attention to it can provide Google and other search engines with more information and help drive traffic to your site.
The Solution
To fix the problem of duplicate meta and title content I added a bit of PHP code to my theme’s header.php file. When a reader of iceflatline.com uses the Older Entries link to view a page containing its previous five posts, this code will automatically prepend or append a page number to the contents of these tags so that the metadata in each of these pages appears unique to the search engine. The page numbering starts with 2 and increments each time the reader navigates to a previous page.
- Duplicate Meta Tag Content
To eliminate duplicate description and keywords meta tag content, I added the following PHP code to my theme’s header.php file:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php if(is_home()) { echo '<meta name="description" content="'; if ( $paged < 2 ) { } else { echo 'Page ' . ($paged) . ' | ' ; } echo 'Here at www.iceflatline.com you will find how-tos, tutorials, tips, guides, news, reviews and commentary for users of Linux, Unix and Windows"/>'; } ?> <?php if(is_home()) { echo '<meta name="keywords" content="'; if ( $paged < 2 ) { } else { echo 'Page ' . ($paged) . ' | ' ; } echo 'howto, install, configure, setup, server, review, games, network, ubuntu, crunchbang, fedora, linux, unix, windows"/>'; } ?> |
Now when someone clicks on Older Entries the description and keywords meta tag content will be prepended with a page number so that it looks like this:
1 2 3 |
<meta name="description" content="Page 2 | Here at www.iceflatline.com you will find how-tos, tutorials, tips, guides, news, reviews and commentary for users of Linux, Unix and Windows"/> <meta name="keywords" content="Page 2 | howto, install, configure, setup, server, review, games, network, ubuntu, crunchbang, fedora, linux, unix, windows"/> |
If desired, the following variations of the code above will append the page numbers instead:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php if(is_home()) { echo '<meta name="description" content="Here at www.iceflatline.com you will find how-tos, tutorials, tips, guides, news, reviews and commentary for users of Linux, Unix and Windows.'; if ( $paged < 2 ) { } else { echo (' | ' . 'page '); echo ($paged); } echo '"/>'; } ?> <?php if(is_home()) { echo '<meta name="keywords" content="howto, install, configure, setup, server, review, games, network, ubuntu, crunchbang, fedora, linux, unix, windows'; if ( $paged < 2 ) { } else { echo (' | ' . 'page '); echo ($paged); } echo '"/>'; } ?> |
- Duplicate Title Tag Content
To eliminate duplicate title tag content, I appended the following PHP code to the tag’s existing contents in my theme’s header.php file:
1 2 3 4 5 |
if ($paged < 2 ){ }else{ echo (' | ' . 'page '); echo ($paged); } |
Combined with the original code, the revised PHP code within the title tags now looks like this:
1 2 3 4 5 6 7 8 9 10 11 |
<title><?php wp_title(' '); if(wp_title(' ', false)){ echo ' | '; } echo bloginfo('name'); if ($paged < 2 ){ }else{ echo (' | ' . 'Page '); echo ($paged); } ?></title> |
Now when someone clicks on Older Entries the title description will be appended with a page number so that it looks like this:
1 |
<title>iceflatline | Page 2</title> |
Conclusion
There ya have it. A bit PHP code and I fixed these nagging problems, and saved myself the hassle of having to update and manage yet another WordPress plugin or use some other solution that didn’t fully meet my needs.
Thank you I was looking for several months a way like this, because I don´t want to continue using All in one seo to avoid duplicated home pages which it was my problem in Google webmasters tools.
Awesome – been looking for this code for a while.. would of thought wordpress would auto solve pagination problems
Adrian, awesome; glad I could help.
Really wished this worked for me but whenever I try to bookmark my wp themes front page I am getting duplicate titles. It appears like “SitenameSitename Description”.
I have read alot of articles and tried various scripts and just cannot seem to solve the problem. I am running Wp 3.3.1 and I too would really rather not use any plugins to solve it, any suggestions?
tornadic, sorry, I’m not really sure how to help.
@tornadic – try this, put it right below the tag:
– <?php bloginfo('description'); }
elseif ( is_category() ) { single_cat_title(); echo ' – ' ; bloginfo(‘name’); }
elseif (is_single() ) { single_post_title(); echo ' – ' ; bloginfo(‘name’); }
elseif (is_page() ) { single_post_title(); echo ' – ' ; bloginfo(‘name’); }
if ($paged
What it does is when you’re;
on the homepage – “Sitename – Description”
on single post – “Post Title – Sitename”
on single category – “Category – Sitename”
on single category page# – “Category – Sitename – Page#
and so on…
@iceflatline – Thanks for this tutorial. Exactly what i was looking for to fix the duplicate meta and title thingy GWebmaster is nagging me about. Also could you help me with the results page? When I hover on chrome’s tab, your site’s search title looks like this: “Search Results apache | iceflatline”. On my site, it’s “Sitename.com/?s=searchword”. Can you tell me what code to use? Thanks!
CA-3, thanks for helping out here.
Concerning the title issue, I added the following to my title tag code in the header of my theme:
[php]
<?php wp_title(‘ ‘);
if(wp_title(‘ ‘, false)){
echo ‘ | ‘;
}
echo bloginfo(‘name’);
[/php]
As a result, when someone is on home page they get “iceflatline”. On single posts they get “How To Fix Duplicate Title and Meta Tags When Spanning Multiple Home Pages In WordPress | iceflatline”. On a search result for “wordpress” they will see “Search Result wordpress | iceflatline”.
So, the entire title tag code looks like this now:
[php]
<title>
<?php wp_title(‘ ‘);
if(wp_title(‘ ‘, false)){
echo ‘ | ‘;
}
echo bloginfo(‘name’);
if ($paged < 2 ){
}else{
echo (‘ | ‘ . ‘Page ‘);
echo ($paged);
}
?>
</title>
[/php]
Thanks for the help, the code worked for my site but I seem to be having troubles on properly placing “bloginfo(‘description’);”
“< ?php wp_title(' '); echo ' – ' ; bloginfo('description');" resulted in displaying "Description – Sitename".
This line, added to my code, did the trick I wanted:
elseif (is_search() ) {echo('Search result: '); the_search_query(); echo ' – ' ; bloginfo(‘name’); }
Thanks again for your time, hope you feature more wordpress tricks in the future. =)
CA-3, awesome. Glad you got it worked out. Thanks for posting back.
2 if(wp_title(‘ ‘, false)){
3 echo ‘ | ‘;
4 }
5 echo bloginfo(‘name’);
Not sure I understand this part of the code. Is the if statement testing for a null wp_title? What I am getting for output is bloginfo(‘name’) bloginfo(‘description’) | bloginfo(‘name’). That’s why I’m asking about the the if statement.
I have a bloginfo(‘name’) in my General Settings. Why would I want it twice in the ?
how about in blogger??
kalyan, I have no idea.
awesome thanks for share ,,