npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@nera-static/plugin-canonical-links

v2.0.1

Published

A plugin for Nera static site generator to create canonical links in to be used in the head.

Downloads

24

Readme

@nera-static/plugin-canonical-links

A plugin for the Nera static site generator to generate canonical and alternate <link> tags for SEO in the document <head>. Helps search engines correctly index content across domains and languages.

✨ Features

  • Adds <link rel="canonical"> for SEO
  • Supports multilingual alternate links
  • Easy Pug template integration
  • Configurable origin and slug mapping

🚀 Installation

Install the plugin in the root of your Nera project:

npm install @nera-static/plugin-canonical-links

Then create a config file in your project’s config/ directory:

config/
└── canonical-links.yaml

Nera will automatically detect the plugin and apply it during the build.

⚙️ Configuration

Create config/canonical-links.yaml:

app_origin: https://your-domain.com
page_identifier: slug
available_languages:
    - en
    - es
    - fr
  • app_origin: The canonical base URL (overrides app.origin).
  • page_identifier: Shared key to match localized versions (defaults to slug).
  • available_languages: List of supported language codes (used to create alternate links).

📄 Usage in Templates

Include the plugin’s view in your layout head:

head
    include /node_modules/@nera-static/plugin-canonical-links/views/index

This will generate:

<link href="https://example.com/index.html" rel="canonical" />
<link href="https://example.com/es/index.html" hreflang="es" rel="alternate" />
<link href="https://example.com/fr/index.html" hreflang="fr" rel="alternate" />

🗂️ Content Structure

To use alternate links, provide a shared identifier (e.g., slug) across translations:

pages/
├── index.md
├── es/
│   └── index.md
└── fr/
    └── index.md

Example frontmatter for each:

pages/index.md

lang: en
slug: home

pages/es/index.md

lang: es
slug: home

pages/fr/index.md

lang: fr
slug: home

🧩 Rendering Details

The plugin provides a view file that includes two partials:

  • views/index.pug

    include partials/canonical-link
    include partials/alternate-links
  • views/partials/canonical-link.pug

    if (meta.canonicalLink)
        link(href=meta.canonicalLink.href, rel=meta.canonicalLink.rel)
  • views/partials/alternate-links.pug

    if (meta.alternateLinks && meta.alternateLinks.length > 0)
        each alternate in meta.alternateLinks
            link(href=alternate.href, hreflang=alternate.hreflang, rel=alternate.rel)

You can copy or customize these templates for full control.

🧪 Development

npm install
npm run test

Includes unit and integration tests using Vitest and Pug.

🧑‍💻 Author

Michael Becker
https://github.com/seebaermichi

🔗 Links

� Compatibility

  • Nera: v4.1.0+
  • Node.js: >= 18
  • Plugin API: Uses getMetaData() for optimal performance

�📦 License

MIT