Avoiding Duplicate Content with Used Car Listings Database: Robots.txt vs Noindex vs Hash URLs (Help!)
-
Hi Guys,
We have developed a plugin that allows us to display used vehicle listings from a centralized, third-party database. The functionality works similar to autotrader.com or cargurus.com, and there are two primary components:
1. Vehicle Listings Pages: this is the page where the user can use various filters to narrow the vehicle listings to find the vehicle they want.
2. Vehicle Details Pages: this is the page where the user actually views the details about said vehicle. It is served up via Ajax, in a dialog box on the Vehicle Listings Pages.Example functionality: http://screencast.com/t/kArKm4tBo
The Vehicle Listings pages (#1), we do want indexed and to rank. These pages have additional content besides the vehicle listings themselves, and those results are randomized or sliced/diced in different and unique ways. They're also updated twice per day.
We do not want to index #2, the Vehicle Details pages, as these pages appear and disappear all of the time, based on dealer inventory, and don't have much value in the SERPs. Additionally, other sites such as autotrader.com, Yahoo Autos, and others draw from this same database, so we're worried about duplicate content. For instance, entering a snippet of dealer-provided content for one specific listing that Google indexed yielded 8,200+ results: Example Google query.
We did not originally think that Google would even be able to index these pages, as they are served up via Ajax. However, it seems we were wrong, as Google has already begun indexing them. Not only is duplicate content an issue, but these pages are not meant for visitors to navigate to directly! If a user were to navigate to the url directly, from the SERPs, they would see a page that isn't styled right.
Now we have to determine the right solution to keep these pages out of the index: robots.txt, noindex meta tags, or hash (#) internal links.
Robots.txt Advantages:
- Super easy to implement
- Conserves crawl budget for large sites
- Ensures crawler doesn't get stuck. After all, if our website only has 500 pages that we really want indexed and ranked, and vehicle details pages constitute another 1,000,000,000 pages, it doesn't seem to make sense to make Googlebot crawl all of those pages.
Robots.txt Disadvantages:
- Doesn't prevent pages from being indexed, as we've seen, probably because there are internal links to these pages. We could nofollow these internal links, thereby minimizing indexation, but this would lead to each 10-25 noindex internal links on each Vehicle Listings page (will Google think we're pagerank sculpting?)
Noindex Advantages:
- Does prevent vehicle details pages from being indexed
- Allows ALL pages to be crawled (advantage?)
Noindex Disadvantages:
-
Difficult to implement (vehicle details pages are served using ajax, so they have no tag. Solution would have to involve X-Robots-Tag HTTP header and Apache, sending a noindex tag based on querystring variables, similar to this stackoverflow solution. This means the plugin functionality is no longer self-contained, and some hosts may not allow these types of Apache rewrites (as I understand it)
-
Forces (or rather allows) Googlebot to crawl hundreds of thousands of noindex pages. I say "force" because of the crawl budget required. Crawler could get stuck/lost in so many pages, and my not like crawling a site with 1,000,000,000 pages, 99.9% of which are noindexed.
-
Cannot be used in conjunction with robots.txt. After all, crawler never reads noindex meta tag if blocked by robots.txt
Hash (#) URL Advantages:
- By using for links on Vehicle Listing pages to Vehicle Details pages (such as "Contact Seller" buttons), coupled with Javascript, crawler won't be able to follow/crawl these links. Best of both worlds: crawl budget isn't overtaxed by thousands of noindex pages, and internal links used to index robots.txt-disallowed pages are gone.
- Accomplishes same thing as "nofollowing" these links, but without looking like pagerank sculpting (?)
- Does not require complex Apache stuff
Hash (#) URL Disdvantages:
- Is Google suspicious of sites with (some) internal links structured like this, since they can't crawl/follow them?
Initially, we implemented robots.txt--the "sledgehammer solution." We figured that we'd have a happier crawler this way, as it wouldn't have to crawl zillions of partially duplicate vehicle details pages, and we wanted it to be like these pages didn't even exist. However, Google seems to be indexing many of these pages anyway, probably based on internal links pointing to them. We could nofollow the links pointing to these pages, but we don't want it to look like we're pagerank sculpting or something like that.
If we implement noindex on these pages (and doing so is a difficult task itself), then we will be certain these pages aren't indexed. However, to do so we will have to remove the robots.txt disallowal, in order to let the crawler read the noindex tag on these pages. Intuitively, it doesn't make sense to me to make googlebot crawl zillions of vehicle details pages, all of which are noindexed, and it could easily get stuck/lost/etc. It seems like a waste of resources, and in some shadowy way bad for SEO.
My developers are pushing for the third solution: using the hash URLs. This works on all hosts and keeps all functionality in the plugin self-contained (unlike noindex), and conserves crawl budget while keeping vehicle details page out of the index (unlike robots.txt). But I don't want Google to slap us 6-12 months from now because it doesn't like links like these ().
Any thoughts or advice you guys have would be hugely appreciated, as I've been going in circles, circles, circles on this for a couple of days now. Also, I can provide a test site URL if you'd like to see the functionality in action.
-
Perhaps those URLs were indexed before you blocked them. If you have them blocked now, either by robots.txt and/or by robots meta noindex tag, you can use Google's URL Removal Tool in GWT to get them out of the index. It may take awhile though.
I see nothing wrong with adding a nofollow tag to those href links. Go for it. If nothing else, it could help you salvage your crawl budget.
-
Oh, I was under the mistaken impression that nofollowing the links would conserve that pagerank--a pretty outdated thought, I now realize. Thanks for clearing that up!
However, would you see any negatives to nofollowing the links just to keep Google from indexing the pages they lead to? Just so we avoid a zillion of those "A description for this result is not available because of this site's robots.txt" pages?
Unfortunately, my developers are having trouble figuring out how to retain the functionality we have without href tags, so it's looking like we're going to keep those links.
Again, thank you so much for lending your time and knowledge, Everett--you rock!
-
Nofollowing them won't help you conserve any of that pagerank for other links on the page. Instead, you would seek to make those something other than href tags. I'm not a developer, but here is one example that might help explain what I'm trying to say: http://www.quackit.com/javascript/popup_windows.cfm . Notice the javascript for the pop-up window on that page does not contain an href tag.
-
Everett,
Thank you so very much for the thoughtful and really helpful answer. We will implement the robots.txt disallow statements you suggested, and I will discuss with my developer the ability to reference just the id portion of the url. We've begun the URL removal process in Webmaster Tools, and fortunately, in the vast majority of cases, the content hasn't been indexed due to robots.txt--just the URL.
As far as all of the hrefs diluting pagerank, what are your thoughts on nofollowing these links? We've had this on the table for some time, but haven't been able to come to a decision. It would curb the pagerank dilution, and it would probably keep Google from indexing those robots-disallowed pages. It's good to know these pages probably wouldn't ever trip a Panda/dupe content filter, but it still seems cleaner/neater for them not to be indexed at all. That said, I'm afraid nofollowing the links could look suspicious to Google. All combined, it would result in 25-35 nofollowed internal links on each page, with about the same amount dofollowed (if you include navigation, etc).
Thank you again for lending your time and expertise to this answer. It is truly, truly, truly appreciated.
-
The javascript you shared would allow Google to fairly easily access the page ending in dtc_inventory_ajax.php?id=29935291. If that's the page you want them to not be able to access, perhaps you'd be better off referencing just the id portion of the URL, which should be enough for the database to take the user to the right page.
Regardless, you "should" be OK with just the robots.txt block, though all of the href tags are sort of diluting the amount of pagerank you can send to other pages from whatever page you're on.
The robots.txt disallow statement you provided might be improved upon.
Disallow: /*?
The one above seems to me like it would only work on URLs that were in the root directory. Try this one instead of, or in addition to, the one above:
Disallow: /?id=*
Also I'd add this one to any Wordpress site, which in itself should take care of the issue if the URL in your script is an example of those that you're concerned about:
Disallow: /wp-content/plugins/
You can use the URL Removal Tool in Google Webmaster Tools to get the ones that have already been crawled out of the index. You can do it at the URL level, or at the directory level.
Lastly, if you're blocking Google and the SERP says unable to display because of the robots.txt file I don't think you need to worry about the content on those pages affecting your site with regard to a Panda penalty or anything like that. However, if Google had already indexed the content on those pages you will want to remove the URLs via Webmaster Tools as described above.
-
Yes, I hear you on Google seeming to be able to crawl anything. Here is the million-dollar question: if Google is finding the links but not crawling the pages to get any content, are these pages still going to part of any Panda filter? Could we be penalized for robots-disallowed pages? My worry is yes.
What are your thoughts on implementing rel=nofollow on these links? That, combined with robots.txt, combined with the javascript, should have the intended effect. I'm just a little reluctant for us to nofollow ~25-30 internal links on each page like this.
As far duplicate content, no the pages are not exact duplicates, and there are things we could do to set them apart from everybody else. We have some good ideas for functionality, actually. But...I have to say I don't have enough faith in Google that this will keep us safe. I'm afraid we could still trip some filter, and CRASH there goes the traffic.
-
I think the JavaScript implementation might still be able to be crawled by Google. Any more, I'm becoming convinced that Google can crawl just about anything. But, I'll be curious to see what the results are. Definitely update this thread with what ends up happening from that approach.
As for the robots.txt message, that would indicate that they are finding the link to the page but not crawling the page to get any content.
As for duplicated content concerns, just to take a step back, are the pages 100% the same or are you making alterations to the text? If you can do easy things that make that page different from the other sites (even if it is functionality), then the page isn't a true duplicate and there might be some good reasons why people could want to find those pages in the search results.
Ultimately, you have the same page, but you are making the page better than those other websites. If that is the case, then you should be safe letting those pages rank. Where having the same content as your competitor really hurts (in my experience, anyway) is when you aren't offering anything different than any other sites.
Hope that helps.
-
Matthew, thank you so much for the thoughtful response!
We do not currently have a fallback solution for users with Javascript disabled, mainly because--as you said--Google could then access it, and we'd have the same problem we have now. We implemented the Javascript solution this weekend, resulting in button code like this:
[Contact Seller](javascript:void(0);)
We don't know yet if Google will be able to access this. Any ideas? We've uploaded this version of our plugin to a new test site, in order to see what happens.
As for the robots.txt solution, Google actually indexed the urls after the robots.txt file was uploaded, and we did test the file in Webmaster Tools to confirm that it worked prior to uploading it. We used Disallow: /*? to try and keep Google from crawling/indexing our Ajax urls, which all have question marks in them (like the data-url link in the code above).
Some of the indexed pages look normal in the SERPs--like any indexed page with a normal description, etc--and others have the message: "A description for this result is not available because of this site's robots.txt." I believe, from my research, that Google is indexing these pages based on the internal links to them.
It wouldn't be a tragedy if users navigated directly to the vehicle details pages, as we could make sure the pages are styled for them. The bigger issue is that these pages are not really unique, given that multiple companies are pulling from the same database.
Any thoughts on the Javascript implementation?
-
Hey,
This is definitely a complicated issue, and there is some risk in making a move in the wrong direction.
Here are my thoughts which might help you out. Feel free to private message me or shoot me an email (see my profile) and I'd be happy to talk more.
On the hash solution, would that require JavaScript be enabled in order to access those pages or would you have a fallback solution for those without JavaScript?
If you don't have a fallback solution for those without JavaScript, you might negatively affect visitors with disabilities. For instance, some types of Ajax are challenging for people with disabilities to access (see here to start digging into that: http://webaim.org/techniques/javascript/).
Thing is, if you have a fallback solution, Google could still access those. However, Google may still be able to access those pages with JavaScript as Google can execute some forms of JavaScript. Given that, the more appropriate solution would be to use the robots.txt file. You mentioned, though, that the command you put in didn't seem to work since Google kept indexing those pages. Couple questions:
First, did Google index those pages after the change or had those pages been indexed prior to the robots.txt change? Things take time, so I'm wondering if you didn't give them enough time to adjust.
The other question would be whether or not you tested the robots.txt file in Google Webmaster Tools? That just gives you an extra verification that it should work.
Also, you mentioned something interesting about the Vehicle Detail pages: "these pages are not meant for visitors to navigate to directly!" Given that is the case, is it possible for your developers to add some sort of server-side check to see if people are accessing the detail pages from the listing pages?
For instance, on some sites I've worked a cookie is set when you've reached the listing page that says "this person is okay to reach the detail page" and then the visitor can only reach the detail page if that cookie is set. Without that cookie, the visitor is redirected back to a listing page. Not sure how exactly that would work on your site, but it might be a way to keep visitors who find those pages in a Google search result from seeing the incorrectly styled page.
I hope that helps. Like I said, feel free to email me or private message me if you'd like me to take a look at your site or chat with you about more particulars.
Thanks!
Got a burning SEO question?
Subscribe to Moz Pro to gain full access to Q&A, answer questions, and ask your own.
Browse Questions
Explore more categories
-
Moz Tools
Chat with the community about the Moz tools.
-
SEO Tactics
Discuss the SEO process with fellow marketers
-
Community
Discuss industry events, jobs, and news!
-
Digital Marketing
Chat about tactics outside of SEO
-
Research & Trends
Dive into research and trends in the search industry.
-
Support
Connect on product support and feature requests.
Related Questions
-
Possible duplicate content issue
Hi, Here is a rather detailed overview of our problem, any feedback / suggestions is most welcome. We currently have 6 sites targeting the various markets (countries) we operate in all websites are on one wordpress install but are separate sites in a multisite network, content and structure is pretty much the same barring a few regional differences. The UK site has held a pretty strong position in search engines the past few years. Here is where we have the problem. Our strongest page (from an organic point of view) has dropped off the search results completely for Google.co.uk, we've picked this up through a drop in search visibility in SEMRush, and confirmed this by looking at our organic landing page traffic in Google Analytics and Search Analytics in Search Console. Here are a few of the assumptions we've made and things we've checked: Checked for any Crawl or technical issues, nothing serious found Bad backlinks, no new spammy backlinks Geotarggetting, this was fine for the UK site, however the US site a .com (not a cctld) was not set to the US (we suspect this to be the issue, but more below) On-site issues, nothing wrong here - the page was edited recently which coincided with the drop in traffic (more below), but these changes did not impact things such as title, h1, url or body content - we replaced some call to action blocks from a custom one to one that was built into the framework (Div) Manual or algorithmic penalties: Nothing reported by search console HTTPs change: We did transition over to http at the start of june. The sites are not too big (around 6K pages) and all redirects were put in place. Here is what we suspect has happened, the https change triggered google to re-crawl and reindex the whole site (we anticipated this), during this process, an edit was made to the key page, and through some technical fault the page title was changed to match the US version of the page, and because geotargetting was not turned on for the US site, Google filtered out the duplicate content page on the UK site, there by dropping it off the index. What further contributes to this theory is that a search of Google.co.uk returns the US version of the page. With country targeting on (ie only return pages from the UK) that UK version of the page is not returned. Also a site: query from google.co.uk DOES return the Uk version of that page, but with the old US title. All these factors leads me to believe that its a duplicate content filter issue due to incorrect geo-targetting - what does surprise me is that the co.uk site has much more search equity than the US site, so it was odd that it choose to filter out the UK version of the page. What we have done to counter this is as follows: Turned on Geo targeting for US site Ensured that the title of the UK page says UK and not US Edited both pages to trigger a last modified date and so the 2 pages share less similarities Recreated a site map and resubmitted to Google Re-crawled and requested a re-index of the whole site Fixed a few of the smaller issues If our theory is right and our actions do help, I believe its now a waiting game for Google to re-crawl and reindex. Unfortunately, Search Console is still only showing data from a few days ago, so its hard to tell if there has been any changes in the index. I am happy to wait it out, but you can appreciate that some of snr management are very nervous given the impact of loosing this page and are keen to get a second opinion on the matter. Does the Moz Community have any further ideas or insights on how we can speed up the indexing of the site? Kind regards, Jason
Intermediate & Advanced SEO | | Clickmetrics0 -
Large robots.txt file
We're looking at potentially creating a robots.txt with 1450 lines in it. This will remove 100k+ pages from the crawl that are all old pages (I know, the ideal would be to delete/noindex but not viable unfortunately) Now the issue i'm thinking is that a large robots.txt will either stop the robots.txt from being followed or will slow our crawl rate down. Does anybody have any experience with a robots.txt of that size?
Intermediate & Advanced SEO | | ThomasHarvey0 -
Question about Syntax in Robots.txt
So if I want to block any URL from being indexed that contains a particular parameter what is the best way to put this in the robots.txt file? Currently I have-
Intermediate & Advanced SEO | | DRSearchEngOpt
Disallow: /attachment_id Where "attachment_id" is the parameter. Problem is I still see these URL's indexed and this has been in the robots now for over a month. I am wondering if I should just do Disallow: attachment_id or Disallow: attachment_id= but figured I would ask you guys first. Thanks!0 -
Duplicate Content for Deep Pages
Hey guys, For deep, deep pages on a website, does duplicate content matter? The pages I'm talk about are image pages associated with products and will never rank in Google which doesn't concern me. What I'm interested to know though is whether the duplicate content would have an overall effect on the site as a whole? Thanks in advance Paul
Intermediate & Advanced SEO | | kevinliao1 -
How to Avoid Duplicate Content Issues with Google?
We have 1000s of audio book titles at our Web store. Google's Panda de-valued our site some time ago because, I believe, of duplicate content. We get our descriptions from the publishers which means a good
Intermediate & Advanced SEO | | lbohen
deal of our description pages are the same as the publishers = duplicate content according to Google. Although re-writing each description of the products we offer is a daunting, almost impossible task, I am thinking of re-writing publishers' descriptions using The Best Spinner software which allows me to replace some of the publishers' words with synonyms. I have re-written one audio book title's description resulting in 8% unique content from the original in 520 words. I did a CopyScape Check and it reported "65 duplicates." CopyScape appears to be reporting duplicates of words and phrases within sentences and paragraphs. I see very little duplicate content of full sentences
or paragraphs. Does anyone know whether Google's duplicate content algorithm is the same or similar to CopyScape's? How much of an audio book's description would I have to change to stay away from CopyScape's duplicate content algorithm? How much of an audio book's description would I have to change to stay away from Google's duplicate content algorithm?0 -
Panda Updates - robots.txt or noindex?
Hi, I have a site that I believe has been impacted by the recent Panda updates. Assuming that Google has crawled and indexed several thousand pages that are essentially the same and the site has now passed the threshold to be picked out by the Panda update, what is the best way to proceed? Is it enough to block the pages from being crawled in the future using robots.txt, or would I need to remove the pages from the index using the meta noindex tag? Of course if I block the URLs with robots.txt then Googlebot won't be able to access the page in order to see the noindex tag. Anyone have and previous experiences of doing something similar? Thanks very much.
Intermediate & Advanced SEO | | ianmcintosh0 -
Robots.txt disallow subdomain
Hi all, I have a development subdomain, which gets copied to the live domain. Because I don't want this dev domain to get crawled, I'd like to implement a robots.txt for this domain only. The problem is that I don't want this robots.txt to disallow the live domain. Is there a way to create a robots.txt for this development subdomain only? Thanks in advance!
Intermediate & Advanced SEO | | Partouter0 -
Duplicate Content from Article Directories
I have a small client with a website PR2, 268 links from 21 root domains with mozTrusts 5.5, MozRank 4.5 However whenever I check in google for the amount of link: Google always give the response none. My client has a blog and many articles on the blog. However they have submitted their blog article every time to article directories as well, plain and simle creating duplicate and content. Is this the reason why their link: is coming up as none? Is there something to correct the situation?
Intermediate & Advanced SEO | | danielkamen0