SEO in Rails
SEO is an important but often overlooked aspect of web development. It is essential in ensuring the maximum exposure for your website and good SEO can really improve traffic to your sites.
Dynamic page titles
Imagine that we have a review website. We might want to have the title of our webpage change depending on which page of our website the user is on.
Rails has a helper method called content_for
that allows us to do just that.
We start off by going to our application.html.erb
file where we will find the head
of our webpage. This contains our title. We can add the content_for
helper in using embed Ruby tags. We can choose what we call it but it makes sense to call it :page_title
as this is what the content is for.
The syntax looks like this. The first part is the helper method and the second part is what we want to refer to it as or in other words what content are we targeting. This needs to be written as a symbol as it is something that will be used across the site and won't change.
content-for, :page_title
We can then drop it into our title
tag like this:
<title> <%= content_for :page_title %> - Bien Reviews </title>
Now we can go to our views and extract the information that we want from there to be used in the title.
At the top of your view we need another erb (embed ruby) tag. Note that we do not want the =
present this time as we are not displaying this content in the view, simply extracting information from it.
<% content_for :page_title, @review.title %>
Then we have our helper of content_for :page_title
which we wrote earlier followed by a comma. This is where we put what is is we want the title to be. In our case, in our review website we have a title for each review so we want to display this. We can say @review.title.
This is relating to our model of Review
and we are grabbing the title
information for this particular page. Of course this needs to be adapted depending on what content it is you are displaying. Now, each of our review pages will have a title of the specific review in the tab.
Improved URL's
Have a look at these two urls for two different music review sites. One is a lot clearer than the other.
http://drownedinsound.com/releases/20498/reviews/4152162
This first url is not that clear as to what the page is about, you get it might be review but the numbers are ultimately meaningless to the user.
https://pitchfork.com/reviews/albums/eminem-music-to-be-murdered-by/
Take this second url. It is immediately clear as to what it is. It's a review of an album by eninem called music-to-be-murdered-by.
In our model we can override the default URL with a thing called to_param
. This is deep within rails but we are going to take it out and change it.
To do this we can define the method to_param
and give it new instructions.
def to_param
#code to override will go here
end
In our example of the review website we can take the id
of the review and convert it to a string so that we can use it in the url.
Next, we want to add some information. We can do this by using a ‘+’ sign and we are going to have a “-” here. Then we can have the title of the page we are on. We can get this using the word title
which we are able to access as we are inside the model.
Now, as it stands the url will change to include the title but the spaces will be filled with ‘%’ and it does not look that great. To change this we can change it into a parameter by using .parameterize
on the title. What this will do is get rid of the spaces, uppercased letters, slashes etc which makes the URL hard to read and will convert it into a much more friendly and cleaner URL.
def to_param
id.to_s + "-" + title.parameterize
end
These small improvements are relatively simple to implement and make a big difference to any website.