Siloing Your Site For SEO Success – Links

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

Useful Plugins

Code Snippets

Don’t show stickies or posts from child categories on category pages

// 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' );

Allows HTML in category descriptions

// 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' );
	}

Category / Silo Landing Page

// 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;

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.

18 responses on “Siloing Your Site For SEO Success – Links

  1. Jonathan

    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.

  2. Jonathan

    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?

  3. Stephen Cronin Post author

    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.

  4. Jonathan

    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.

    1. Stephen Cronin Post author

      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

        1. Stephen Cronin Post author

          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

  5. Jonathan

    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!

  6. Matteo Palmiro

    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

  7. Gerard | SEO Zeta

    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.

  8. Stephen Cronin Post author

    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

  9. Gerard | SEO Zeta

    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

  10. Michael Ehline

    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?

  11. Nestor Pabon

    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

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>

Anti-Spam Quiz: