Umbraco SEO

How to make an Umbraco site rank — what the .NET CMS handles out of the box (clean URLs, automatic 301s on rename, HTTPS), what needs a package (meta fields, XML sitemaps, robots.txt, canonical tags, noindex), and what needs custom developer work (hreflang, structured data). The package stack — SeoToolkit, SEO Checker by Soeteman Software, URL Tracker — and why uMarketingSuite (now Umbraco Engage) is not an SEO tool.

First published: Jun 27, 2026 · Last updated: Jul 19, 2026 · Advanced
demand #5 in CMS#27 in Platform SEO#176 in Technical SEO#236 on the site

Umbraco is a .NET-based open-source CMS, and its defining SEO trait is that it's developer-led by default: unlike WordPress, where a non-developer installs a plugin, almost every meaningful SEO feature in Umbraco needs a .NET developer or a package. Think of it in three tiers. Built-in: clean URLs from node names, automatic 301 redirects when you rename a node's URL, HTTPS enforcement, basic 404 handling. Needs a package: meta fields, XML sitemaps, robots.txt editing, noindex controls, canonical tags — via SeoToolkit (free, open-source, by patrickdemooij9) or SEO Checker (commercial, by Soeteman Software — not Jumoo, who make uSync). Needs custom dev: hreflang for Language Variants, structured data, advanced canonical logic. uMarketingSuite rebranded to Umbraco Engage in November 2024 and is a CRO/personalization platform, not a technical SEO tool. As of mid-2026, Umbraco 17 (released November 2025) is the current LTS; Umbraco 13, the previous LTS, is in its Security phase and reaches end of life in December 2026 — plan an upgrade path before then. The smart play is building self-serve SEO controls into the backoffice before an SEO team ever touches the site.

TL;DR — Umbraco is a .NET open-source CMSA content management system (CMS) is software that lets users create, manage, and publish digital content — like blog posts and pages — without writing raw code. WordPress, Drupal, and Joomla are the most common open-source CMS platforms., and its SEO story is developer-led by default. Three tiers: built-in (clean URLs from node names, automatic 301 on URL rename, HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.', 404s, Language Variants); needs a package (meta fields, XML sitemapAn XML sitemap is a UTF-8 file listing the canonical URLs on your site (with optional lastmod) so search engines can discover and prioritize them. It's a discovery and diagnostic aid, not a guarantee of indexing — and Google ignores its priority and changefreq tags., robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere., noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed., canonicals — via SeoToolkit (free) or SEO Checker by Soeteman Software (paid)); needs custom dev (hreflangHreflang is an annotation (in HTML, HTTP headers, or XML sitemaps) that tells search engines which language and optional region a page targets, and which alternate versions exist. It only works when every page in the cluster references all the others., structured data, advanced canonical logic). SEO Checker is by Soeteman Software, not Jumoo (who make uSync). uMarketingSuite became Umbraco Engage in Nov 2024 and is a CRO tool, not SEO. Umbraco 17 (Nov 2025) is the current LTS; 13, the prior LTS, is in its Security phase and hits end of life in Dec 2026. The real craft is building self-serve SEO controls into the backoffice before an SEO team arrives.

Evidence for this claim The article's described umbraco-seo capabilities must be evaluated against the platform's current documentation rather than assumed to be search-engine behavior. Scope: Platform-specific capability documentation. Confidence: high · Verified: Umbraco CMS documentation Evidence for this claim Regardless of platform, Google needs crawlable URLs, accessible rendered content, descriptive metadata, and valid search directives. Scope: Google requirements independent of platform. Confidence: high · Verified: Google Search Central: SEO Starter Guide

What Umbraco is (the 30-second version)

Umbraco is an open-source CMS built on ASP.NET Core. You model content with Document Types (typed content templates), arrange pages in a content tree, and render them with Razor templates. It comes two ways: Umbraco Cloud (managed hosting on Azure with Cloudflare at the edge — automatic TLS, firewalls, point-in-time restore) and self-hosted (your own server, full control). Both run the same CMS; the difference is who manages the infrastructure.

The single most important framing for SEO: most SEO configuration in Umbraco requires a .NET developer. This is the structural difference from WordPress, where a non-developer can install a plugin and self-serve. On Umbraco, even basic meta fields are a developer task unless a package has already added them.

The three tiers of Umbraco SEO

I find it cleanest to sort every SEO feature into one of three buckets.

Tier 1 — built in. Clean URL generation from node names (an automatic ToUrlSegment() transform produces lowercase, hyphenated slugs), automatic 301 redirectsA redirect sends browsers and crawlers from a requested URL to a different one. An HTTP redirect specifically is a 3xx status code paired with a Location header; meta refresh and JavaScript redirects achieve a similar navigation without being a 3xx response themselves. Permanent redirects (301/308) are Google's signal the target should be canonical; temporary ones (302/303/307) aren't. when a node’s URL changes on rename, HTTPSHTTPS is the encrypted version of HTTP — it uses TLS to authenticate the server and protect data in transit between a browser and a website. Google announced it as a lightweight ranking signal in 2014 and today conditionally prefers HTTPS pages as canonical; Chrome marks plain HTTP pages 'Not Secure.' enforcement, proper 404 status codes, and Language Variants (the multilingual content model).

Tier 2 — needs a package. Meta title/description fields, XML sitemaps, robots.txt editing, noindexNoindex is a directive that tells search engines to keep a page out of their index, so it won't appear in search results. It works only on pages a crawler can actually fetch — a page blocked in robots.txt can never be noindexed. controls, and canonical tags. These all come pre-built in SeoToolkit (free) or SEO Checker (paid).

Tier 3 — needs custom dev. hreflang for Language Variants, structured data, and advanced canonical logic. Even with a package, these often need template code or careful per-culture configuration.

The auto-301 on rename — Umbraco’s quiet win

This is the built-in feature most guides miss, and it’s genuinely good. Umbraco’s official URL tracking docs put it plainly: “Whenever a document is published and causes changes to its URL (and any of its descendants’ URLs), Umbraco makes a note of the old URLs. Whenever an incoming request is served and the default content finders cannot find a matching published document, Umbraco checks whether the URL matches one of these saved URLs. If a match is foundA 302 (\"Found\") is a temporary redirect: it forwards users to a new URL while telling search engines the original URL should stay in the index. It's a weak canonicalization signal, not the zero-equity dead end of SEO folklore., Umbraco returns a 301 Redirect response pointing to the new URL of the document.”

In practice: rename a page, change its slug, and the old URL keeps working with a 301 automatically. No plugin (WordPress needs Yoast Premium or Redirection for the equivalent), no developer ticket. This alone prevents a lot of the broken-link and lost-equity damage that routine content editing causes elsewhere. Don’t over-read it, though: this is publication-triggered tracking of a document’s own URL changes — it does not cover arbitrary rewrite rules, or the more complex culture-and-hostname changes you hit during a migration. Name your hosting or middleware layer for those, not Umbraco core.

Worth knowing alongside it: Umbraco has several reserved routing property aliases, and they’re easy to mix up because their names sound similar but their behavior isn’t interchangeable. umbracoUrlName changes the URL path suffix a node generates — set a value and it overrides the auto-generated slug, while the backoffice node name stays whatever you like. umbracoUrlAlias is different again: a comma-separated list of alternate full paths that resolve to the same node, masking the real URL in the browser’s address bar rather than redirecting to it. umbracoRedirect sends a 302 (temporary) redirect to another node, picked via a content picker property — it’s a visible redirect, not silent. umbracoInternalRedirectId is the one that does the silent internal rewrite: the target page’s content is served transparently, with no redirect visible to the browser. Treat these four as distinct tools, not variations on one “redirect” concept, and confirm actual behavior in your own version’s docs before wiring one into a migration. For advanced control, a developer can also implement IUrlSegmentProvider to pull slugs from a dedicated field instead of the node name. One more gap: trailing-slash and www/non-www consistency is not handled natively — it needs ASP.NET Core middleware or IIS rewrite rules.

Metadata — the developer workflow

Because Umbraco ships no meta fields, the standard pattern is:

  1. Add a “SEO” tab/group to your Document Types — or, better, a composition you can reuse across types.

  2. Add properties: metaTitle, metaDescription, a noIndex toggle, optional canonicalUrl, and Open GraphOpen Graph (OG) tags are `<meta>` elements in a page's head, defined by the Open Graph protocol (ogp.me, created by Facebook), that describe a page as a shareable object — its title, description, image, URL, and type. They control how a link preview card looks when the page is shared on Facebook, LinkedIn, Slack, Discord, WhatsApp, and iMessage. They are not a direct Google ranking factor, though Google reads og:title, og:image, and og:site_name as inputs to how a result appears. fields (ogTitle, ogDescription, ogImage).

  3. Render them in the master template with Razor:

    <title>@Model.Value("metaTitle")</title>
    <meta name="description" content="@Model.Value("metaDescription")" />
    <link rel="canonical" href="@Model.Url(mode: UrlMode.Absolute)" />
  4. Add fallback logic so an empty metaTitle defaults to the node name.

Or install a package that adds this composition for you. That’s the whole choice in Umbraco SEOUmbraco SEO is the set of technical, on-page, and structural practices applied to sites built on Umbraco — a .NET-based open-source CMS. Umbraco ships almost no SEO functionality out of the box (no meta fields, no XML sitemap, no robots.txt, no structured data), so nearly every meaningful optimization needs either a package like SeoToolkit or SEO Checker, or custom developer work., over and over: build it, or install a package that built it.

One thing worth internalizing here: a Document Type only defines what fields exist — a field having a value in the backoffice proves nothing about what ends up in the deployed HTML. Output is owned by the template. Umbraco’s current templating supports master-template inheritance with named sections, so a child template can place its metaTitle/metaDescription/canonical markup into the master’s <head> — but that means every template that inherits from the master (and every fallback path when a section is left empty) needs to be checked individually. Don’t assume one Document Type’s renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. behavior generalizes to every page type on the site; verify the rendered HTML per template.

The package stack (and one to not confuse)

SeoToolkit (by patrickdemooij9) — free, open-source, on NuGet. Ships a dedicated package release aligned to each Umbraco major (currently up through Umbraco 18, released mid-2026); it’s actively maintained, but confirm your Umbraco version maps to the right package version before installing. Meta-field management, dynamic sitemapA sitemap is a file that lists the pages, images, videos, and other files on your site so search engines can discover them. It helps discovery, but submitting a sitemap doesn't guarantee crawling or indexing. generation (per-domain sitemaps plus a sitemap indexA sitemap index is a sitemap of sitemaps — a single file that lists your other sitemap files instead of listing URLs directly. It's how large sites stay under the 50,000-URL / 50MB-per-sitemap limit while submitting just one file.), a backoffice robots.txtA plain-text file at the root of a host that tells crawlers which URLs they may and may not request. It controls crawling, not indexing — a blocked URL can still be indexed if it's linked from elsewhere. editor with validation, script manager, redirect management, and canonical support. The sitemap automatically adds itself to robots.txt. This is the default starting point for most builds. From its README: “SeoToolkit creates a /sitemap.xml for each domain and also a sitemap index with all your sitemaps listed within. All sitemaps generated have a valid syntax, so Google will have no problem with indexingStoring a crawled page in the search index so it can appear in results. Crawled is not the same as indexed — Google selects what to keep, and indexing isn't guaranteed. it.”

SEO Checker (by Soeteman Software) — commercial (free trial on localhost; license for production). Also tracks Umbraco’s major-version cadence with its own releases (v18.0.1 was current as of mid-2026, supporting Umbraco 18+) — check the release notes for the version that matches your CMS. Adds SERP snippet previews and social previews in the backoffice while editing, automated issue detection (missing meta tagsMeta tags are HTML elements in a page's head that pass metadata about the page to search engines and browsers. For SEO only a few matter — the title element, the meta description, and the robots meta tag — while meta keywords and most others are ignored., broken links, canonical issues), redirect management, automatic robots.txt and sitemap.xml, and — importantly — multilingual support that renders per-culture metadata including hreflangHreflang is an annotation (in HTML, HTTP headers, or XML sitemaps) that tells search engines which language and optional region a page targets, and which alternate versions exist. It only works when every page in the cluster references all the others. tags. Critical attribution note: SEO Checker is made by Soeteman Software, not Jumoo. Jumoo makes uSync (a content deployment/sync tool), which is a different thing entirely. This mix-up is common; don’t repeat it.

URL Tracker — a redirect-management package (404/302 monitoring, redirect creation, recommendations based on similar URLs, query-string matching). Worth installing from day one for migrations and restructures, so an SEO team can manage redirects without developer tickets.

uMarketingSuite → Umbraco Engage — Umbraco acquired uMarketingSuite and rebranded it Umbraco Engage in November 2024. It’s a CRO/personalization platform: server-side first-party analytics, A/B testing, persona targeting, visitor profiling. It is not a technical SEOTechnical SEO is the practice of making a site easy for search engines to crawl, render, index, and (now) be eligible for AI answers. It's the foundation that lets your content and links rank — not a ranking trick of its own. package — it won’t manage meta tags, sitemaps, robots.txt, or schema. It complements SEO (engagement signals, testing variants); it doesn’t replace SeoToolkit or SEO Checker. Don’t recommend it as your SEO package.

Multilingual SEO — Language Variants and hreflang

Language Variants are a real Umbraco strength. You define languages by ISO code in Settings → Languages, assign each language to one or more hostnames (so you can do /en/, /de/, or separate domains), and editors translate content within the same node by switching language tabs. Each variant can have its own URL slug (/about-us in English, /acerca-de in Spanish), and fallback rules prevent blank pages when a translation is missing.

But the SEO catch: hreflang is not automatic. Language Variants manage the content; they don’t emit hreflang tags. You implement those in Razor by iterating over cultures:

@foreach (var lang in Umbraco.LocalizationService.GetAllLanguages())
{
    <link rel="alternate" hreflang="@lang.IsoCode"
          href="@Model.Url(culture: lang.IsoCode, mode: UrlMode.Absolute)" />
}
<link rel="alternate" hreflang="x-default"
      href="@Model.Url(culture: defaultCulture, mode: UrlMode.Absolute)" />

— or use SEO Checker, which renders per-culture metadata including hreflang. Pair this with self-referencing canonicals per language variant so the variants don’t fight each other for indexing. (How Google actually picks among variants is in Canonicalization.)

Structured data

Umbraco officially documents three ways to implement schema, all needing a developer:

  1. Field-based — add a text-area property where editors paste JSON-LDJSON-LD (JavaScript Object Notation for Linked Data) is a script-based structured data format, typically paired with the schema.org vocabulary to describe page content for search engines and AI systems. Google recommends it over Microdata and RDFa because it's the easiest format to implement and maintain at scale — but all three work, and structured data isn't a ranking signal.; render it in <head>.
  2. Template-driven with editor input — the developer builds schema selectors in the backoffice; editors fill fields; the template generates JSON-LD from them.
  3. Automatic — schema is generated in the template from document properties, no editor input (best for blog posts and other templated types).

For .NET developers, the Schema.NET library (a NuGet package, not an Umbraco package) gives strongly-typed C# classes for Schema.org types, so you build JSON-LD from objects instead of concatenating strings, then render with ToHtmlEscapedString(). JSON-LD is Google’s preferred format; validate with the Rich ResultsRich results (formerly 'rich snippets') are enhanced search listings — stars, images, prices, breadcrumbs, video thumbnails, and more — that Google and Bing build from structured data. They're a display feature, not a ranking factor, and eligibility never guarantees they'll show. Test. This is where Umbraco’s typed Document Types actually become an advantage — it’s easier to generate accurate, consistent schema from modeled fields than from WordPress’s freeform editor content.

Performance and Core Web Vitals

The .NET baseline is lean: the Kestrel web server is fast, and Umbraco doesn’t carry the plugin overhead a heavy WordPress install accumulates. Umbraco Cloud adds Cloudflare edge caching and Azure infrastructure for free; self-hosted (often Windows/IIS) needs more manual performance work. For Core Web Vitals: use Umbraco’s built-in Image Cropper (it can output dimensions, which helps CLSCumulative Layout Shift — a unitless score for unexpected visual movement, taken from the largest burst (session window) of layout shifts, not the lifetime sum. ≤0.1 is good.) plus the Slimsy package for responsive WebP/AVIF with lazy loadingLazy loading defers loading of off-screen or non-critical resources — usually images and iframes — until they're about to enter the viewport. The native way to do it is the loading=\"lazy\" HTML attribute, which needs no JavaScript.; reserve space for media to avoid layout shift; and remember CSS/JS bundling/minificationMinification is the process of removing unnecessary characters — whitespace, line breaks, comments, and (for CSS/JS) redundant syntax or long identifiers — from CSS, JavaScript, or HTML source, without changing how the browser parses or executes it. It's distinct from compression (Gzip/Brotli): the two are complementary, applied minify-first, then compress. is not built in — use .NET bundling middleware or a front-end build step.

Version landscape: LTS, STS, and the 13→14 backoffice rewrite

Umbraco ships on a fixed cadence with two release tracks: LTS (Long-Term Support, 18 months of active support) and STS (Standard-Term Support, roughly 3 months). As of mid-2026, Umbraco 17 (released November 2025, on .NET 10 LTS) is the current LTS. Umbraco 13 — the LTS most enterprise sites are still running — is past its Support phase and now in Security-only patching, reaching end of life in December 2026. If you’re still on 13, that’s your upgrade deadline, not a someday item. Umbraco also runs shorter STS releases between LTS majors (16 and 18 shipped in 2025 and mid-2026 respectively) for teams that track the latest features rather than the support window.

The version-history detail that still matters for SEO tooling: Umbraco 14 introduced a rebuilt backoffice — moved from the old AngularJS UI to TypeScript/Web Components (Lit). That rewrite meant SEO packages had to be updated to render their UIs correctly, which is why package compatibility is tied to specific Umbraco majors rather than a blanket “v8+” claim. Check the package’s own release notes against your Umbraco version before any upgrade — don’t assume last year’s compatibility note still holds.

One more wrinkle: Umbraco 12+ ships a Content Delivery API, enabling headless/decoupled builds. That changes the SEO calculus — metadata and schema must be injected by the front-end framework (with the usual SSR-vs-CSR renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM. concerns), not by Razor templates. (Background: JavaScript SEO.)

The real craft: make the site SEO-agency-friendly

The recurring pain point on Umbraco isn’t capability — it’s the constant stream of developer tickets from SEO teams who can’t self-serve. Tim Payne put the fix well in Skrift Magazine: “Work smart, and modify your back office so that the SEO guys can do most of the work themselves.” Concretely, build this before handoff:

  • A global SEO settings node with fields for HEAD scripts and BODY start/end scripts (kills the endless GTM-snippet requests).
  • An SEO tab on every page Document Type — meta title, description, canonical, noindex/nofollowrel=\"nofollow\" is a value of the HTML link rel attribute that tells search engines you don't vouch for a linked page and don't want to pass ranking signals to it. Since 2019–2020 Google treats it as a hint, not a directive — and it does not reliably block crawling or indexing. — so editors self-serve.
  • URL Tracker installed from day one for redirect management.
  • An XML sitemapAn XML sitemap is a UTF-8 file listing the canonical URLs on your site (with optional lastmod) so search engines can discover and prioritize them. It's a discovery and diagnostic aid, not a guarantee of indexing — and Google ignores its priority and changefreq tags. auto-generated from day one.
  • robots.txt served from day one, referencing the sitemap.

Do that and Umbraco goes from “developer bottleneck” to a perfectly capable SEO platform. Skip it and you’ll feel the friction every week.

Umbraco vs WordPress, briefly

Umbraco’s structured Document Types give content built-in context, which makes systematic schema and metadata consistency easier at scale — as the 24 Days in Umbraco community put it, “WordPress is not great at SEO out of the box; most of the content is not semantic or modeled. Umbraco’s structured document types provide built-in context.” The trade-off is ease of use: WordPress + Yoast lets a non-technical user manage most SEO alone, where Umbraco needs a developer for even simple changes. For large, multilingual, heavily-modeled enterprise sites, Umbraco’s structure often wins; for a small team that wants to self-serve, WordPress is gentler.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.