Magento SEO Guide

Magento SEO Guide

Magento LogoOver the last few years, I’ve worked on a host of enterprise-level Magento websites for companies from all over the world and during this time I’ve faced pretty much every technical Magento SEO issue imaginable.

Magento can be a bit of a nightmare from an SEO perspective if you don’t know what you’re doing, which is why I’ve written this guide to help with the less obvious technical and duplicate content issues.

Layered / faceted navigation issues

It is very common for layered or faceted navigation to cause duplicate content issues with Magento, as filters that create new URLs will often get indexed by search engines. Magento out of the box appends query string filter parameters, but a number of non-proprietary modules also use directories and various other conventions, which still lead to the same outcome.

One of the biggest mistakes I see retailers make in ecommerce SEO is simply changing the dynamic convention that the URLs and meta titles are based on – so effectively making the URL look clean and making the title tag slightly more targeted. This is not a good idea as, due to the volume of low quality pages being indexed, it leaves a website susceptible to Google Panda, which specifically targets websites with high levels of indexable pages with very little unique content.


AJAX navigation

Using AJAX navigation will enable you to filter the products featured on your website without changing the URL, leaving only the original category page. If you don’t have an experienced Magento developer on-hand, this is likely to be a bit of a nightmare. There are modules that can help with this, but to be honest if you don’t have a good developer to help, I would just avoid making this switch. Also, this can cause a lot of additional technical issues – I’ve seen retailers adopt this method and block product links via excess javascript on multiple occasions. If you choose to go down this route (which should be about user experience as well as SEO), make sure you consult an experienced SEO consultant before making the switch.

Prevent search engines from accessing the pages

Most of the time, when I’ve dealt with websites that have faced this issue, I’ve opted to apply meta robots rules (noindex, follow) to tell search engines not to index the pages. You can use either meta robots tags or x robots tags to do this, they will both meet the requirements for removal requests in Google Webmaster Tools and ultimately serve the same message to search engines.

I would recommend using the noindex, follow tag, as this tells search engines not to index the page but to continue crawling the website. If you already have lots of these filter pages in the index, this will help you to either remove them (in Google Webmaster Tools) or tell search engines to stop indexing the pages.

This can be achieved by using the MageSEO plugin (which is a joint project between me and a Magento development agency), which allows you to assign manual meta robots rules, gives you greater control over the canonical tag and also allows you to edit the robots.txt file from the Magento back-end. You can find out more here.

Use the canonical tag

The canonical tag can be a very good solution for preventing these pages from being indexed, by canonicalising back to the parent category page (this will also pass value back to the page). I do have a couple of reservations with the canonical tag – the first is that I’ve seen many occasions where search engines have ignored the canonical tag if the dynamic pages have links and appear authoritative. The second is that if you already have the pages in the index (and you need to resolve the issue fast) it can take a long time for Google and other search engines to adapt to the change. You also won’t be able to manually remove the pages as they won’t meet Google removal guidelines.

Parameter handling in Google Webmaster Tools

I’ve always suggested that the parameter handling resource in Google Webmaster Tools isn’t overly effective, especially with faceted navigation duplicate content issues – however, I’ve heard lots of very good SEOs saying it’s got a lot better.

Like the canonical tag, I’d recommend implementing this even if you’re using other solutions.

I also wrote this comparative guide to all SEO options for dealing with faceted navigation in Magento.

Catalogue search pages

Another very annoying issue with Magento is when catalogue search pages get indexed by Google, as generally there will be thousands. In order to prevent this, I would simply recommend disallowing the assigning noindex, follow meta robots tags to the search page and the children queries contained within the directory. If you’re having issues with crawl budget, I’d suggest using the robots.txt file instead of meta robots tags.

Secure pages

It’s really common for secure pages to be indexed by Google (for non-secure websites), which can be very annoying from a duplicate content perspective. For these pages, I would recommend adding a separate robots.txt file for https pages, although it’s fundamental that you ensure that this file isn’t pushed onto the http pages. You can either disallow your selected pages or choose to disallow all pages, but it’s key that the changes aren’t reflected on http pages.

You can also use the canonical tag to point to the preferred version, be it the http or https version of the page. This will resolve the issue and can be achieved by using a plugin that I’m releasing soon.

Duplicate product page content because of hierarchical URLs (including category path within URLs)

If you’re using hierarchical URLs, which will include the category name name within the product page URL path, you’re setting yourself up to have duplicate variations of a product within multiple categories. For this reason, I would strongly recommend using top-level product URLs, as this will prevent issues like this and allow you to have one single representative version of a product.

If you’re already using category paths within your product URLs, make sure you’re using the canonical tag to point to the primary version of each product – this will also resolve the issue, although top-level products would be the best option.

Also, if you’re switching to top-level products, make sure you get your developer to create a rewrite rule to redirect old product URLs, as by default, Magento will not redirect them.

Issues with URL rewriting

Another surprisingly common issue with Magento is URL rewriting, which can cause either category or products page URLs to revert back to the original /catalog/ URLs, which do not write them based on the title of the page or for these URLs to run in parallel.

I would recommend blocking these URLs and just keeping an eye on them, as I’ve had issues in the past (caused by issues with refreshing) where all of the URLs have been reverted back to the old structure without 301 redirects being applied.

Another issue with Magento rewrites is when Magento appends a number to the end of product and category URLs, so -1, -2, -3 for example. This happens when an existing URL path is already being used and the rewrites are replacing the original URL without changing it. This can be a huge issue and usually requires development resource to resolve. If you have any questions about this – feel free to drop me an email.

Another cause for the number being added to the URL comes from updating products via a CSV file – when this happens you simply need to ask your developer to remove the rewrites from the rewrite table, although this should be tested extensively before being applied to your live site.

Ensure that 301 redirects are being used

By default, Magento is set to use 302 redirects, which will prevent redirects and rewrite rules from passing value. I would strongly recommend ensuring that your redirects are set to 301 to ensure that you’re making the most of your link value.


Magento category and sub-category pages will generally serve large numbers of products via different pages (pagination), which will mean the same content is being used on different variations of the same page. These pages should really use the rel next and prev tag, which was introduced by Google in 2011 to help webmasters illustrate that they are paginated pages.

The tag, which can be added to the pagination links or via the <head> would look like this:

<link rel=”next” href=”″ />

<link rel=”prev” href=”″ />

Session IDs / SIDs

Sessions ID pages are used to record a user’s session, commonly when they move from one domain to another. These pages can cause all kinds of duplicate content issues if they are indexed and there’s no limit to the amount of URLs that can be generated.

Magento performance

Magento is notoriously slow, which in very severe cases, can impact organic search rankings. There are a number of things you can do to optimise the speed of your Magento website, including minimising javascript and CSS, combining javascript, using page caching, optimising front-end assets / images and much more. This is something I’d strongly recommend anyway from a user experience / conversion optimisation perspective.

International targeting with Magento

For one reason or another, Magento merchants seem to really struggle with international store implementations from an SEO perspective. The most common configuration I see is merchants using one catalog and using an extension to add additional back-end fields (meaning the rest of the page remains the same) or using multi-store and making the mistake of using the same URLs, meta data, copy (in some places) and just creating variants for different countries they want to target.

The first of those two options (international extension) also usually serves the pages via odd query string URLs, as it’s as a variant of the original page. Also, if pages don’t have content usually these pages will have the content of the original page – which is bad from a panda perspective, as this means you’re going to have duplicates of the original pages.

I would suggest using multi-store, noindexing pages until they have unique content and also using the hreflang tag. You can choose to do this via a sub-directory or separate CCtlds. The href-lang tag should be implemented so that the equivalent URL is referenced from other stores on a page-level basis – I see too many sites that just reference the homepage on every page of the site.

This is a fundamental thing to get right, as doing it wrong can have very serious consequence from an SEO perspective. I did a project for a mid-sized furniture retailer around a year ago – they were using an extension and around 20% of the pages had unique content, the rest served the content from the original page (so English). They had no hreflang tag and lots of low quality pages in the index. We implemented the hreflang tag, removed lots of pages (until we’d published new content) and paid lots of students to write localised content for products and category pages) – they saw an increase in organic visibility of over 350% over the next year, including serious improvements for international phrases.

Other Magento SEO issues

  • Magento sitemap – The magento sitemap is always being criticised as it can’t be edited and it often includes unwanted pages and assigns strange priorities. I would recommend looking at third-party modules to resolve this issue.
  • Feed-related duplicate content – if you’re using your feed to send content to third party websites, you should look to have a second catalog with separate content, as this can cause serious duplicate content issues with external websites.
  • Product title tag conventions – I’d suggest editing the convention of product title tags, which you won’t be assigning manually if you have a lot of SKUs. Make sure you include key product characteristics to optimise for long-tail traffic.

If you have any questions about anything I’ve mentioned in this blog post or anything else related to Magento, please feel free to drop me a message via this form (or email I also provide Magento SEO audits and consultancy for large Magento projects.

Share this blog post:

Paul Rogers
Paul is an experienced technical SEO who specialises in working on Magento ecommerce websites. Paul has worked on over 100 Magento websites, ranging from small startups to global brands from all over the world.
Related Posts
  • Hi Paul, One of the better posts I’ve read!
    What would you recommend the quickest way to get duplicate content out of SERPS ? Canonical tags were disabled but now enabled

    Thanks mike

  • What i have seen the main problem in magento is pagination and duplicate product pages. Thanks Paul for providing the right solution for solving these problem.

  • Thanks for information,

  • Hey there! Do you know if they make any plugins to assist with SEO?
    I’m trying to get my blog to rank for some targeted keywords but I’m not seeing very good results.
    If you know of any please share. Kudos!

    • Hi Buford, I’ve just replied to your question via email. There are lots I’d recommend but it depends on what you’re looking to achieve.

  • (the captcha made me think or far too long)

    So – one thing I am trying to figure through, we have a platform that is essentially a catalogue / search / system with 755,540 different products (rougly) many of the links come into what is essentially search pages – should we be blocking these or are we losing the link juice … Part of me thinks that links to /robots out pages lose juice, part of me thinks that google is cleverer than that and gets it … ?

    • That’s a really tricky one! In the past with things like this I’ve monitored ‘top page’ reports etc to look at all pages with links and when I’ve seen a search page with links, I’ve redirected it to a category page (or sometimes created an additional category page to facilitate for it. This is a bit of a work around, but it’s impossible to do it with rules and I’m quite cautious about panda so will always take the search pages out.

Leave Your Comment

Your Name*
Your Webpage

7 + = eleven

Your Comment*

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>