canonical Plugin

Overview

The purpose of the Scully canonical plugin is to take a canonical link attribute from a route and replace the value of the canonical link in the head of a page, or add the link tag if it doesn't exist. This is needed for SEO purposes, if a given article was first published on another site, for example.

Features

  • ✅ Replaces the canonical link with the provided URL for the link tag
  • ✅ Adds a canonical link tag if one doesn't exist for a page

Table of Contents

Installation

NPM

npm install scully-plugin-canonical --save-dev

Yarn

yarn add scully-plugin-canonical --dev

Usage

Render plugins get access to information about the route, and the plugin looks for the title in the following locations in order:

  • route.canonical
  • route.data.canonical
  • route.canonicalUrl
  • route.data.canonicalUrl
  • route.canonical_url
  • route.data.canonical_url

If the canonical url is set in the frontmatter of a markdown file, the attribute shows up on route.data.

To use this plugin, you need to just require the package inside the Scully config.ts for your project, i.e. scully.your-project-name.config.ts. After requiring the plugin, add it to the defaultPostRenderers array for the site:

// scully.your-project-name.config.ts
require('scully-plugin-canonical');

export const config: ScullyConfig = {
  projectRoot: './src',
  projectName: 'your-project-name',
  outDir: './dist/static',
  routes: {},
  defaultPostRenderers: ['setCanonicalLinkPlugin'],
};

If you only want it to be added to some routes, add it like this:

// scully.your-project-name.config.ts
require('scully-plugin-canonical');

export const config: ScullyConfig = {
  ...
  routes: {
    '/blog/:slug': {
      type: 'contentFolder',
      slug: {
        folder: './blog'
      },
      postRenderers: ['setCanonicalLinkPlugin']
    }
  }
  ...
};

That's all it takes for the plugin to be included and run on the pages in your app.