Prevent GoogleBot Overload with Default Nofollow
CommentsHere’s a quick tip to exert greater control over which parts of your site a search engine should crawl: modify your link_to helper to make links rel=”nofollow” by default. It’s easy:
The Code
Just add this to your app’s application_helper:
def link_to(*args, █)
unless block_given?
html_options = args[2] || {}
unless html_options.delete(:follow)
if html_options[:rel]
html_options[:rel] += ' nofollow'
else
html_options[:rel] = 'nofollow'
end
end
args[2] = html_options
end
super(*args)
end
Use WillPaginate? You may also want to add the following (adapted from this StackOverflow post):
def will_paginate(*args)
options = args.extract_options!
options[:renderer] = PaginationNoFollow unless options[:renderer] || options.delete(:follow)
super(args.first, options)
end
Set PaginationNoFollow up with an initializer:
require 'will_paginate/view_helpers/link_renderer'
class PaginationNoFollow < WillPaginate::ViewHelpers::LinkRenderer
def rel_value(page)
case page
when @collection.previous_page; 'prev nofollow' + (page == 1 ? ' start nofollow' : '')
when @collection.next_page; 'next nofollow'
when 1; 'start nofollow'
else
'nofollow'
end
end
end
Now, all of your app’s links will default to rel=”nofollow”, but obviously you will want some of your links to be crawled. Just add :follow => true to the options hash of either link_to or will_paginate to opt-in specific links for search engine crawling.
comments powered by Disqus