Links relating to my “Siloing Your Site For SEO Success” talk at WordCamp Sydney on 22 July 2012.
Video
Slides
You can also download a PDF (15MB) of the presentation.
Siloing Theory
- SEO Siloing: Building a Themed Website by Bruce Clay
- How To Silo Your Website series by Michael Gray (aka Graywolf)
Useful Plugins
- WordPress SEO by Joost de Valk
- WP No Category Base by iDope
- Allow HTML in Category Descriptions by Arno Esterhuizen
Code Snippets
Don’t show stickies or posts from child categories on category pages
[sourcecode language=”php”]
// don’t show stickies or posts from child categories on category pages
function sjc_category_posts( $query = false ) {
// Bail if not home, not a query, not main query, or if it’s the admin area or a feed
if ( ! $query->is_category || ! is_a( $query, ‘WP_Query’ ) || ! $query->is_main_query() || $query->is_admin || $query->is_feed )
return;
// only get posts not in sticky posts
$query->set( ‘post__not_in’, get_option( ‘sticky_posts’ ) );
// only get posts in this category (not in child categories)
$query->set( ‘category__in’, get_category_by_slug( get_query_var( ‘category_name’ ) )->cat_ID );
}
add_action( ‘pre_get_posts’, ‘sjc_category_posts’ );
[/sourcecode]
Allows HTML in category descriptions
[sourcecode language=”php”]
// Allows HTML in category descriptions, from Allow HTML in Category Descriptions plugin by Arno Esterhuizen
$filters = array( ‘pre_term_description’, ‘pre_link_description’, ‘pre_link_notes’, ‘pre_user_description’ );
foreach ( $filters as $filter ) {
remove_filter( $filter, ‘wp_filter_kses’ );
}
foreach ( array( ‘term_description’ ) as $filter ) {
remove_filter( $filter, ‘wp_kses_data’ );
}
[/sourcecode]
Category / Silo Landing Page
[sourcecode language=”php”]
// work out category id, then see if there are any subcategories
$main_cat_ID = get_query_var( ‘cat’ );
$subcats = get_categories( array( ‘parent’ => $main_cat_ID, ‘hide_empty’ => 0 ) );
// if it is page 1
if ( $paged < 2 ) :
// show the category description
echo category_description();
// if there are subcategories, loop through and show them
if ( count( $categories ) > 0 ) :
foreach ( $subcats as $category ) : ?>
<div class="subcategory">
<h2><a class="subcategory-link" href="<?php echo get_category_link( $category->term_id ); ?>">
<?php echo $category->name; ?></a></h2>
<?php echo wpautop( $category->description ); ?>
</div>
<?php
endforeach;
endif;
// get sticky posts and show them if they exist
$args = array( ‘category__in’ => $main_cat_ID, ‘include’ => get_option( ‘sticky_posts’ ) );
$myposts = get_posts( $args );
if ( count( $myposts ) > 0 ) :
foreach ( $myposts as $value ) : ?>
<div class="sticky">
<h3>
<a href="<?php echo get_permalink( $value->ID ); ?>" rel="bookmark"
title="<?php echo $value->post_title; ?>"><?php echo $value->post_title; ?></a>
</h3>
<div class="entry-content">
<?php
// if there is an excerpt, use it, otherwise roll our own (get_the_excerpt won’t work outside the loop)
if ( $value->post_excerpt ) :
echo wpautop( $value->post_excerpt );
else :
$sjc_excerpt = explode( ‘<!–more–>’, $value->post_content );
if ( count( $sjc_excerpt ) >= 2 ) :
echo wpautop( strip_tags( $sjc_excerpt[0] ) );
else :
echo wpautop( implode ( ‘ ‘, array_slice( explode( ‘ ‘, strip_tags( $sjc_excerpt[0] ) ), 0, 45 ) ) . ‘ …’ );
endif;
endif; ?>
</div>
</div>
<?php
endforeach;
endif;
// pages 2 and onwards don’t worry about cat desc or stickies, but link to main cat page
else : ?>
<p>For an introduction to this topic and our latest articles, please see the main
<a href="<?php echo get_category_link( $main_cat_ID ); ?>"><?php single_cat_title(); ?></a> page.</p>
<?php
endif;
// if we have any posts in the main loop (no stickies there)
if ( have_posts() ) : ?>
<ul class="other-posts">
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<li><a href="<?php the_permalink() ?>" rel="bookmark"
title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php
jobsinchina3_content_nav( ‘nav-below’ );
// if no posts, and also no stickies and no categories, go with no results
elseif ( count( $myposts ) == 0 && count( $subcats ) == 0 ) :
get_template_part( ‘no-results’, ‘archive’ );
endif;
[/sourcecode]
Converting an existing site
If you decide to convert an existing site, here is the checklist I used. Feel free to use it as the basis for your own, but please tailor it to your situation, not just follow blindly.
Note, I paused between the different implementation stages rather than do it all straight.
Preparation
- Do keyword research and work out the keywords you want to target.
- Map out a high level Information Architecture based on those keywords.
- Review existing content and map it onto new IA.
- Create redirect rules for anything that will change, including posts, categories, custom taxonomies, tags, etc (WordPress *may* do the work for you).
- Identify anything that might break (I had custom plugins, functions.php, hardcoded links in theme, etc).
- Work out what will go in menu
- Modify theme as necessary based on above
BACKUP EVERYTHING!!
Implementation – Stage 1
- Create category structure and enter descriptions
- Remove the category stem
- Upload redirect rules for categories to .htaccess (if WordPress doesn’t do it for you)
Implementation – Stage 2
- Assign posts to new category structure
- Delete categories no longer used
Implementation – Stage 3
- Implement new permalinks – /%category%/%postname%/
- Remove www (if required)
- Upload redirect rules for posts to .htaccess (if required)
- Activate new theme (if required)
- Set up menu
- Setup breadcrumbs
Testing and cleanup
- Make sure you’re not no-indexing your category pages
- Make sure your category pages are in the sitemap.xml
- Check major links
- Check analytics code is running
- Check breadcrumbs
- Check contact form (and any other forms)
- Check category pages
- Update links where possible (start with those you control)
- Run broken link checker over site and update any links (apply redirects)
- Check Google Webmaster Tools
- Watch Google Analytics
- Use Hobo Googlebot plugin to monitor your crawl rate. Google re-crawled my entire site in a couple of days.
Hi very good presentation about SEO, I will use some of those tools in my websites
Been searching for stuff on SILO and I just found this. Going to go through this soon. COuld you let me know if there’s a recording of the whole presentation available? Thanks.
Just went through the presentation. It’s so complicated for a non-programmer. Isn’t there a wordpress silo them that does this more easily?
Hi Jonathan,
The presentation was recorded and should go up on WordCamp TV sometime soon, but I don’t know exactly when. I’m also writing a very long article on this topic (6000 words so far), which should be posted in the next week or two.
I agree that it’s pretty complicated to set this up. Since giving the talk, I’ve decided to create a premium plugin that will tie all this together (and a little bit more that I couldn’t fit into the talk). I may also create a theme, but I think most of it can be done via a plugin that would work with most themes.
There are other premium themes out there to set up siloing. They don’t follow this exact model, but they may be worth having a look at. I can’t tell you if they are any good or not – I’ve never used them – but it may be worth looking into.
Hi Stephen, thanks for your reply. Will look out for the presentation and the blog post to be uploaded. Also, when do you think you’ll get your plugin out? I’d be interested to check it out.
What themes you know incorporate SILOing? I have only heard of Clickbump Theme.
Thanks.
Hi Jonathan,
I was planning to have the plugin finished soon, but I only have a week left before I have shift focus for a month, so it will probably be late October before it’s released. I’ve got most of the code sorted, but I need to make sure that it’s rock solid before releasing it.
I don’t know of any specific themes, but a few showed up in a Google search for WordPress silo theme, although there seemed to be more plugins than themes.
Cheers,
Stephen
Hi Stephen,
Did you manage to complete your plugin? I would like to test it on my new website.
Regards,
Kris
Hi Kris,
As I said on the other post: I plan to release it a year ago! But I’ve been too busy on other things. I am planning to circle back to it soon and finish it off. I’ll announce it here when I do.
Cheers,
Stephen
Still no news about premium plugin? It is 1,5 year from your last message about it. You are procrastinating so much…
OK thanks. Will look forward to it. CHeers!
Stephen, it’s been about 2 months. Still can’t find your presentation on Word TV? Is it somewhere hidden there or is it yet to be uploaded?
Also, don’t think you’ve put up the blog post you mentioned above?
Thanks!
Hi Jonathon,
I just posted a really long article that covers everything that was in the talk:
How To Create A Silo Structure In WordPress
Not sure why it hasn’t appeared on WordPress TV. About 9 of the 21 or so talks from WordCamp Sydney went up a few weeks ago, but the rest haven’t gone up yet.
Cheers,
Stephen
and how to understand whether a site is ranked by Google’s filter
Hi Stephen,
thanks for your tutorial and video.
Do you have any hint why the pages are hidden and the category is displayed?
more in details, I have followed your instruction on a WPMU instance but blogs act in a different way eachother.
One of my blogs works fine and after having installed wp no category base I can redirect the category to the page in order to do siloing.
In the other blog, the page it seems do not exsist. Clicking on the category link I am redirected on the category page http://mydomain.xx/%category%
Htaccess has not redirect within..
any help would be really appreciated.
Cheers Matteo
Hi! I’m using your SILO sistem in all my sites with good results. But now I have a problem: the function sjc_category_posts is not working and I can’t find an alternative. Well… I have an alternative that doesn’t show posts in the main loop, so is not a right solution hehe.
I’m using WordPress 3.5.2 in localhost. Perhaps there is something deprecated, or the WordPress core changed… I don’t know what happend.
Anyway, it is working fine in one site hosted in a shared hosting, with WordPress 3.5.2…
What can I do? Thanks in advance.
Hi Gerard,
I’ve done some testing with several of my sites (on 3.5.2) and I can’t make the problem happen.
Is your localhost running Windows IIS or Apache? It shouldn’t really make a difference.
Perhaps there is a conflict with another plugin – is there a plugin that you’re running on the local site that you aren’t running on the hosted site?
Cheers,
Stephen
Thank you, Stephen. Finally I could fix that. I was using the permalink like this /?page_id=4, when it must be /postname/. In localhost I had to do some changes in a file, enable Rewrite module and create the file .htaccess.
That worked fine, so I did all needed changes and now I can update my sites keeping my calm 🙂
Thanks for your time! Siloing works really good.
Gerard
Thanks mate. This is what my law website is missing. I will institute virtual silos, as my main categories are set as subdomains (category keyword in the url already). My understanding is that there is no more Google adwords keyword too. I have my main keywords alreay as subdomains, so specifically, I an seeking a tool that helps me find semantically related terms and phrases for the posts at base of the tree. Does that make sense? If so, any ideas?
Hi Stephen;
Could you suggest a WordPress frame that can lend itself to this kind of editing?
Thanks in advance for taking this comment.
Nestor
Dear Mr. Cronin
This article helped me when I first learnt about the silo structure in 2013. I tried some elements of it on a WordPress blog and it worked. Now I am implementing silos on blogsot and finding it rather easy. Well, at least, my silos are pretty simply because it is a How To Blog for beginners.
Siloing is such a wonderful way to arrange blogs. We are deeply grateful to Bruce Clay, the mover and shaker of the invention.
Sincerely
Mercedes Moss
http://bit.ly/1Jg3FRT (this is the url for the custom search engine is rather long)