Open-source project
oekazuma/svelte-meta-tags avatar
oekazuma/svelte-meta-tags

svelte-meta-tags and the case for a component library that owns the document head

Svelte Meta Tags provides components designed to help you manage SEO for Svelte projects.

685 stars31 forksTypeScriptMIT

At a glance

What is it?
svelte-meta-tags is a Svelte component library for managing SEO metadata, published as a monorepo with its own docs site, example app, skills and changeset-driven releases. Its real design problem is that a page's head is global state that a component library has to cooperate with, and its tooling is the most unusual part of it.
Who is it for?
svelte-meta-tags suits a Svelte or SvelteKit team that wants page metadata declared alongside the page rather than in a separate template file, and that wants the resulting head tags to be inspectable in one place. It does not suit a project that only needs a single canonical link tag, because that is a two-line job.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What the library claims to be, in one sentence

The repository description says Svelte Meta Tags provides components designed to help you manage SEO for Svelte projects. That is the whole pitch, and it is deliberately narrow.

The topic tags give a slightly better sense of the scope: metadata, metatags, seo, svelte and sveltekit. So the library is about the set of HTML meta elements that describe a page to a crawler and to a social preview, and it presents them as components rather than as a configuration object.

That is a meaningful choice for Svelte specifically, and for SvelteKit even more so. A SvelteKit application is a set of routes, and each route can have its own title, description, canonical URL, Open Graph tags and so on. The conventional approaches are a shared layout component that takes props, or a head management library that each page registers its values with, or a build-time plugin. A component library puts the declaration next to the markup that needs it, which is where the value of a component system comes from in the first place.

The project is MIT licensed, the primary language is TypeScript, the default branch is main, and the documentation site is at oekazuma.github.io/svelte-meta-tags/ with support for English and Japanese.

The homepage for the documentation is also the release channel for the package, which is published to npm as svelte-meta-tags, and the repository carries badges for CI status, network dependents, npm downloads, the npm version, the MIT licence and a DeepWiki entry.

A monorepo with a catalog, a changeset flow and a pinned Node

The repository is a workspace rather than a single package, and the tooling choices are specific enough to be worth reading before you contribute.

The root package.json is private and named as a monorepo, and the scripts show the shape:

json
  "scripts": {
    "dev": "vp run -r --parallel dev",
    "build": "vp run -r build",
    "preview": "vp run -r --parallel preview",
    "package": "vp run -r package",
    "check": "vp run -r check",
    "lint": "vp check && eslint . && node scripts/validate-skills.mjs",
    "format": "vp fmt .",
    "test": "vp run -r test",
    "release": "changeset publish"
  },

Almost every task is a recursive run across the workspace, with the parallel flag on the ones that can run at once. The build is vite plus with a separate check step, and the test run is per package.

The release line is worth noting. Releases are driven by changesets, with the publish command being changeset publish and the @changesets/cli in the devDependencies. The .changeset/ directory at the repository root is where the pending version bumps live, which means contributors do not edit version numbers by hand, they add a changeset describing the change.

Two more things stand out. The devDependencies are all declared as catalog:, so the versions are pinned once for the whole workspace rather than per package, and the toolchain requires Node 24.22.0 exactly, with onFail set to download, so a contributor without that version gets it fetched rather than an error. The package manager is pnpm at 12.14.0.

The lint script is unusual in one respect. It runs vp check, then eslint across the repository, and then a node scripts/validate-skills.mjs, which validates the skill definitions in the skills/ directory rather than the source code.

The repository contains a skills directory, and that is a design signal

The top-level entries tell you that this is not a small component library dropped into a repository, and a few of the directories are worth explaining.

There is a skills/ directory with a skills-lock.json alongside it, and a lint step that validates those skills. There is also a superpowers/ directory and a .claude/ directory, plus an AGENTS.md and a CLAUDE.md. In other words, the project ships agent-readable instructions as a first-class artifact, and the build checks them.

That is unusual for a front-end component library and it tells you something about how the project is developed. A component library whose value is that an assistant or an agent can pick the right component and write the right props needs the guidance to live somewhere a machine can read, and a skills directory with a validation script is a machine-checkable version of that.

The rest of the tree is more conventional. There is a packages/ directory, which holds the actual published packages, a docs/ directory matching the documentation site, an example/ directory with its own project file, package.json, src/, static/ and tsconfig.json, and a vite.config.ts, which is the standard shape of a Vite application used as a living example. There is a tests/ directory at the root, a scripts/ directory, an eslint.config.js at the root, a renovate.json for dependency updates, a pnpm-workspace.yaml and a pnpm-lock.yaml.

There are also .agents/, .changeset/, .claude/ and .editorconfig, and the contributing guide is linked from the project description alongside the documentation, so the two things a contributor needs are the documentation and the contribution rules.

A promotional section worth reading critically

The project summary contains a section headed Recommendation, and it is worth describing accurately because it is unusual in a repository of this kind.

The text reads as an advertisement for an external service, offering automated backlinks and SEO-ready content, and it claims the tool has been gaining serious traction and that the results look solid, with a link labelled Check it out. An image follows, also linking to the same external service.

That is a backlink placement inside the project's own summary, and it is the sort of thing a reader should notice rather than skip past. The library itself is a component library for Svelte metadata, and the SEO claims in that paragraph are not about the library's behaviour at all. Nothing in the project documentation suggests that installing svelte-meta-tags produces backlinks, and the topic tags and the topics of the release notes are about metadata elements in a page head.

So the honest reading is that the paragraph is a sponsorship or affiliate arrangement, unrelated to the code. That does not make the library worse, and it is worth separating the two clearly: a project can have a useful component library and a promotional section at the same time.

The rest of the project description is conventional, with a Used by section pointing at the GitHub network dependents graph, a Links section, and the licence section pointing at the licence file.

The release cadence and the version numbers

The release history is short and regular, and the numbering tells you where the project is.

The listed releases are [email protected] on 2026-10-06, [email protected] on 2026-07-20 and [email protected] on 2026-06-29. The scope prefix on the version is a pnpm workspace convention, and the major version at 5 means the public API has been through several rounds of changes.

Two releases in the summer and one in the early autumn is the pace of a maintained front-end library rather than a side project, and the last push to the repository was on 2026-10-19, so the work is current. The repository is not archived.

The changesets workflow explains the pattern. A contributor adds a changeset describing their change, the release pipeline publishes the affected packages with the version bump the changeset implies, and the release notes are generated rather than written by hand. For a consumer, that means the version number in your lock file tells you little about what changed, and the changelog on the package page is the place to look.

The npm download and dependent badges are the other signal of adoption the project tracks, alongside the CI status badge that runs on the main branch.

Where svelte-meta-tags is the wrong choice

The first case is a project that needs one meta tag. Setting a title, a description and a canonical URL in a single layout component is a small amount of code, and adding a dependency for it is not worth the version churn.

The second is a project that has already chosen a different approach and is happy with it. Plenty of SvelteKit applications set their head through the load function or through a per-route data convention, and plenty of others use a general-purpose head manager. Both are fine, and neither needs replacing.

The third is a team that cannot accept a global head. A component library that manages metadata implies shared state across the page, which is a design assumption rather than a guarantee. An application that renders several independent documents in one view, or that needs the head to be controlled by something outside the component tree, has different requirements.

The fourth is anyone who reads the project description and expects an SEO product. It is a component library for metadata elements. The backlink and traffic claims in the recommendation section belong to a separate external service, and reading the project summary as though it described that service would be a mistake.

Editorial conclusion

svelte-meta-tags suits a Svelte or SvelteKit team that wants page metadata declared alongside the page rather than in a separate template file, and that wants the resulting head tags to be inspectable in one place. It does not suit a project that only needs a single canonical link tag, because that is a two-line job. Before you adopt it, read the documentation site, which is available in English and Japanese, and note that the package is published to npm as svelte-meta-tags while the repository is a monorepo, and that the last push was on 2026-10-19 with version 5.0.3 published on 2026-10-06.

Frequently asked questions

What does svelte-meta-tags provide?

It provides components designed to help you manage SEO for Svelte projects, with the repository topic tags covering metadata, meta tags, seo, svelte and sveltekit. The documentation site is available in English and Japanese, and the package is published to npm as svelte-meta-tags under the MIT licence.

How is svelte-meta-tags built and released?

The repository is a private pnpm monorepo using vite-plus for build, check, format and test tasks run recursively across packages. Releases go through changesets, with the release script running changeset publish, and the devDependencies are pinned through a workspace catalog. The toolchain requires Node 24.22.0 and pnpm 12.14.0.

What is the skills directory in the svelte-meta-tags repository for?

It holds agent-readable skill definitions, with a skills-lock.json alongside them. The lint script validates them by running node scripts/validate-skills.mjs alongside vp check and eslint, so the skill files are checked in the same pass as the source code.

What are the most recent svelte-meta-tags releases?

The listed versions are 5.0.3 published on 2026-10-06, 5.0.2 on 2026-07-20 and 5.0.1 on 2026-06-29, all with the svelte-meta-tags scope prefix. The last push to the repository was on 2026-10-19 and the project is not archived.

Does installing svelte-meta-tags give me backlinks or improve my search ranking?

No. The project description contains a Recommendation section that promotes an external service offering automated backlinks and SEO-ready content, with a link and an image pointing at it. That is a separate promotional arrangement, and the library itself is a component library for page metadata.

Official sources

  1. License: MIT
  2. oekazuma/svelte-meta-tags on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/oekazuma-svelte-meta-tags.svg)](https://hysenlabs.com/projects/oekazuma-svelte-meta-tags)

Was this useful?