Jun 17 2008

Michael Keaton Stars In Multiplicity II – eCommerce Pagination

With Andy MacDowell playing the role of Googlebot…

Have you ever seen the movie Mulitplicity? Do you also happen to run/manage an eCommerce website? If so, then you should know exactly what I’m referring to without even reading any further. This isn’t a signal to hit your back button now, but instead an indication that what I’m about to share with you will shed light on this important subject and how it affects all online retailers – and really any website with pagination for that matter.

Most online retailers use pagination in their product catalogs, and many don’t even understand the underlying effects of this feature. This topic is something that I’ve been performing quite a bit of research on over the past year and is near and dear to my heart. It’s a concern that not only spans SEO, but also Usability, so it is important to define a balance between those needs.

So What’s the Big Deal Anyways?

The issue is that pagination can introduce duplicate content issues on your website. The traditional eCommerce pagination engine divides your product listing up into x amount of pages dynamically, whereby each page has almost identical content, as well as identical title, and description tags. So pages 2, 3, 4, etc. all appear to be basically the same.

Not only that, but in many sites we see, page 1 is actually an exact duplicate of the first page the user visits but having a different URL. For example, the URL to a Pepsi T-Shirts page might be /shirts/pepsi where a querystring is appended for pagination like so: /shirts/pepsi?page=2, /shirts/pepsi?page=3, etc. We have found that many eCommerce platforms actually link page 1 as /shirts/pepsi?page=1 – thus creating an exact duplicate of /shirts/pepsi. We’ve actually identified this as an issue in BV Commerce (one of our software partners) and have created a customization to address this (contact us if you’d like the source code)

There’s a lot of information about duplicate content on-site SEO issues that I won’t rehash here, but understand that this can present a problem for siteowners in a number of fronts – canonicalization, duplicate content, and PageRank dilution. If the SEs see that you have 10 pages that all look like they sell Pepsi shirts – how are they going to know which one to show in a search result (wouldn’t it be nice if they showed all 10 of yours)?

While attending the recent SMX Advanced show in Seattle, I discussed this important issue with Gab at length, who suggested that I put together this piece on the issue. Soon afterwards, this topic was also covered by Rand Fishkin at SEOmoz in their “Give It Up” Whiteboard friday video. So I’m glad to see this topic get some much needed attention.

Some Solutions

Now, the solutions I present here are different methods employed by various merchants to combat these issues. Each of these methods present both advantages and disadvantages, and it is important to understand these ramifications and not only what they might mean to your site from an SEO standpoint, but also from a usability and functionality standpoint and also how these solutions tie into your filtering and sorting options.

Option #1: Javascript Pagination

Javascript-based pagination can be accomplished by loading all of the “pages” of results into <div> tags and using Javascript to hide/show the appropriate div when the page is selected by the user. You would need to ensure that some kind of compatibility existing for browsers that have Javascript disabled (which is a very small minority). Also, you need to take into account that although the “pages” as divs aren’t visible to the user, the images would still be loaded when the page is loaded, thus increasing load times of the page. So you’d want to make sure that you can manage when the images are actually loaded on the client (after page-load). This gets a bit more complicated when you consider filtering and sorting options, if these are implemented client-side vs. server side and how they tie into the paging.

Option #2: AJAX Pagination

AJAX can be used to combine Javascript and server-side code to allow you to dynamically pull up data while only refreshing the portion of a page – thus maintaining the same URL. So, in this scenario you would create a page that when loaded lists only the first page of results, and as users click to browse additional pages, they are actually loaded through AJAX thus allowing you to maintain the same page URL – so all of your content can actually be loaded through one physical URL. This same technique can be applied to the filtering and sorting options thus providing one consistent technology to be used for your categorization.

We’ve seen merchants try this method to handle pagination with mixed results. Some of the issues that arise from this are that search engines typically (although evidence shows that for trusted sites they are starting to) don’t spider form submits, thus the search engines might not ever get to deeper pages and might have problems indexing the actual products that are located on those pages. Also, we see usability issues with AJAX typically when it involves a user pressing the “back” button. This more often than not, loads the default page with the default settings and does not remember what page you were one, what filtering criteria you had set, etc. So it is important for online retailers using AJAX based pagination to have some method to remember those settings (like session variables).

Option #3: No-Follow Pagination

No-Follow Pagination was something introduced by the SEO community a while back, and basically what it entails is adding a nofollow attribute (and a noindex on those pages) to each of the pages, so that the search engines are only indexing the first page of that category. This alleviates the duplicate content issue but will drastically reduce the number of pages indexed and you’d want to make sure that you do have some other means to link to the products actually contained in deeper pages (like a sitemap.xml file or on-site category listing of products or even cloaking a full list of products to the SEs on that page).

Option #4: Our Ideal Scenario

The three options presented above all address the issue of duplicate content existing across pagination and ways to handle that. However, we have identified an ideal scenario that presents the least amount of disadvantages, while addressing the issue in what we feel the best manner. This scenario would involve all pages being loaded into divs as described in option #1, where javascript would handle the pagination. Image loading would be controlled through the DOM and only loaded to the browser when that page is active. This would allow all of your products to be listed on one page, minimize download times, and have the search engines the capability to spider each one from that page. AJAX would be utilized to control the sorting and filtering functions – of which these pages will not need to be spidered or indexed because they are just subsets of the master set of products which the search engine has already spidered. Furthermore, to ensure that each website visitor, with or without JS, can use the site, a noscript pagination function would be used combining method #3 of nofollowing a traditional paging structure.

It would take a considerable amount of forethought and development resources to create this robust category pagination solution, stay tuned for more information on that front from Blue Acorn =)

Kevin Eichelberger

Founder & CEO

Founded in 2008, Blue Acorn is the product of Kevin’s great passion and knowledge of all things eCommerce. Kevin’s data-driven approach has culminated in a strong, growing business that’s success is closely tied to the success of its clients. When he’s not immersing himself in eCommerce, Kevin works toward expanding Charleston’s tech community by serving as a board member for the Charleston Digital Corridor Foundation, and is also a mentor and advisor to several startups. A business-savvy technologist, you can find Kevin evangelizing about data, optimization and eCommerce.


Gab Goldenberg
Jun 17 2008

You’ve come up with an intelligent solution here, Kevin. Hadn’t seen this approached with such an expert eye to the technical issues underlying this before. Sphunn!

Richard Baxter
Jun 17 2008

Interesting solution! I’d be interested to see how your page load time is affected, if at all

Bloggers Digest - 6/20/08 | Get Elastic
Jun 20 2008

[…] on pagination for a while, but Blue Acorn beat me to the punch with a fantastic explanation of the SEO impact of pagination (splitting your category pages into Page 1, 2, 3 and so on), your technical options and a […]

Justin @ Palmer Web Marketing
Jun 20 2008

Great post on a much neglected topic!

I might suggest a 5th solution that I’ve used in the past. That solution is simply to eliminate pagination all together, and show all the products on the listing page. While this won’t work in every situation (e.g. for etailers with hundreds of products in each category), I’ve found it helps in several areas:

1) improved indexation/ pagerank flow
2) prevents duplicate content by having only 1 product listing page
3) improved usability (in my a/b testing, product listing pages with more default items resulted in lower bounce rates and higher conversions)

Before I tried this for the first time, I was concerned that high page load time would turn away visitors. However, it didn’t seem to have much of an effect. In fact, it seemed to reduce overall wait time since customers did not have to click to the next page, but rather scroll down. It also seemed to reduce overall server stress, since it reduced overall pageviews.

I’d love to know if anyone else has used this tactic successfully.

Blue Acorn
Jun 20 2008

Thanks Justin – great suggestion. I’ve actually used that solution as well with success (and still am on certain sites). Although as you pointed out – it is very important to have a limited number of products in that category.

Sep 13 2008

Interesting topic and as an architect of one of the major ecommerce products, I would be taking into consideration the approaches you described. Unfortunately Option #1 & #4 won’t really work for categories with a lot of products, since the page load will simply take too long from browser rendering, browser downloading and database querying prospective. #2 looks promising, but again, there is problem with indexing.

Sep 13 2008

Actually made a change to how our product renders paging based on your post, never thought about mycategory.aspx?p=1 pointing to the same page as mycategory.aspx which will understandably impact the page rank. So now our first page simply goes to mycategory.aspx.

Thanks! I’ll be checking your blog more often for ideas to improve our product.

Oct 21 2009

Great Post!!!! Provide a complete solution for exactly the issues I was having! >>> BIG HUG <<< for writing this post.

Steven D
Jun 04 2010

Is this still the best solution. It’s been about 2 years since this was first written …

Aug 05 2010


Nice article and I agree with all of it. However, just thought I’d share my solution – using the following method I’ve always got all my subsequent pages indexed.

I actually wrote a small article about the issue on my blog at http://www.web-design-talk.co.uk/164/prevent-duplicate-content-using-the-canonical-url-tag/ .

Firstly, I don’t use JavaScript paging at all, I kepp it all on the server side to kepp page load times low.

Basically, I try to keep all the pages unique. So for each page I’ll append ‘Page xx’ in title tag and meta desctiption. I’d also, append a ‘page xx’ to the header tag, so I’d end up with ‘Tshirts – Page 2’ in my h1 tag for category page.

I also make use of the canonical tag, I’m aware this isn’t a direct instruction to search engines, simply a ‘strong hint’ as Matt Cutts puts it, but it still doesn’t hurt.

As you’e pointed out cat.php?p=1 and cat.php can cause duplicate content issues. In each page, before I append the ‘page xx’ text to the title, meta and h1 tags I include a check for page 1. If the current page is 1 I’ll simply exclude an additional text and set the canonical url to /cat.php.

I also use seo friendly urls for the page titles too E.g. site.com/tshirts/page/2 as opposed to cat.php?page=2

I’ve personally never had any problems with this approach.


Leave a Reply

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