// Tutorial //

Canonical Link Tag in Jekyll

Published on May 18, 2016
Default avatar
By Alligator.io
Developer and author at DigitalOcean.
Canonical Link Tag in Jekyll

Canonical tags tell search engines the URL for the original content of a page. A popular and effective use of canonical tags is to set them on every page to make it clear which version is the primary one. For example, is it https://yoursite.com/page or is it http://www.yoursite.com/page/? Things like www, https or trailing / can all be seen as different versions, so it’s important for SEO purposes to tell search engines which version is the right version. Given that your website’s URL is properly defined in your _config.yml file, just insert the following in your header/head layout:

<link rel="canonical" href="{{ site.url }}{{ page.url | replace:'index.html',''}}">

As you can see, it’s fairly easy to insert a canonical tag for every page of your Jekyll website by using some simple liquid syntax. The | replace:‘index.html’,‘’ part just ensures that your homepage doesn’t come up as index.html.


Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.

Sign up
About the authors
Default avatar
Developer and author at DigitalOcean.

Still looking for an answer?

Was this helpful?

I have also research Update on Canonical Link Tag: Currently, Jekyll-SEO-tag merges site URL with page URL and generates the final canonical URL. If for a specific page canonical_url is explicitly defined by the user, we can assign the URL to the canonical URL otherwise use default generated URL.

Here is my implementation:

# drop.rb
def canonical_url
  @canonical_url ||= begin
    if page["canonical_url"].present?
      page["canonical_url"].to_s.gsub(%r!/index\.html$!, "/")
    else
      filters.absolute_url(page["url"]).to_s.gsub(%r!/index\.html$!, "/")
    end
  end
end