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.
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.
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 GuideTL;DR — Umbraco is a 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. built on Microsoft’s .NET, popular with bigger and agency-built sites. The one thing to know up front: it’s developer-led. On WordPress you can install Yoast yourself and manage SEO without a developer. On Umbraco, almost every SEO feature — even meta titles and descriptions — needs either a developer or a package. It does give you clean URLs and automatic 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 you rename a page, which is genuinely handy. Everything else you add.
What Umbraco SEO is
Umbraco is an open-source CMS, like WordPress, but built on Microsoft’s .NET framework instead of PHP. You’ll find it behind a lot of enterprise sites, agency builds, and anywhere there’s a .NET team. “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.” just means optimizing a site built on Umbraco so search engines can crawl it, understand it, and rank it.
The thing to know before anything else: Umbraco ships with almost no SEO functionality out of the box. People hear “Umbraco is SEO-friendly” and assume the basics are handled. They mostly aren’t. A fresh Umbraco site has no place to write a meta title or description, no 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., no 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., and no structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding.. You add those — either with a package or by having a developer write the code.
What you get for free
Umbraco does hand you a few useful things by default:
- Clean URLs. Umbraco turns a page’s name into a tidy, lowercase, hyphenated URL automatically.
- Automatic redirects on rename. This is the standout. When you rename a page and its URL changes, Umbraco quietly sets up a 301 redirect from the old URL to the new one — no plugin, no developer ticket. Most CMSes don’t do this.
- 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.' and proper 404 handling.
- Multilingual content (called Language Variants) — a real strength if you run a site in several languages.
What you have to add
Everything most people think of as “SEO basics” lives here:
- Meta titles and descriptions
- An XML sitemap
- A robots.txt file
- Canonical tags and 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
- hreflang tags for multilingual sites
- Structured data (schema)
The good news is you don’t have to build all of it from scratch. A free package called SeoToolkit adds meta fields, sitemapsA 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., 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. editing, redirects, and canonical support to the backoffice. A paid one called SEO Checker (made by Soeteman Software) adds those plus search-result previews and audit features. Install one of those and a non-technical editor can finally manage the basics — though getting it installed and configured is still a developer job.
The thing most people get wrong
Two myths to kill early:
- “Umbraco is SEO-friendly out of the box.” Only for clean URLs and redirects. Everything else needs work.
- “uMarketingSuite is the SEO package.” No. uMarketingSuite was renamed Umbraco Engage in late 2024, and it’s a marketing/analytics/A-B-testing tool — 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 your 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. or 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..
Want the developer-level version — the package comparison, how to wire meta fields into templates, 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. for Language Variants, and the current LTS/version landscape? Switch to the Advanced tab.
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 GuideTL;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.
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:
-
Add a “SEO” tab/group to your Document Types — or, better, a composition you can reuse across types.
-
Add properties:
metaTitle,metaDescription, anoIndextoggle, optionalcanonicalUrl, 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). -
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)" /> -
Add fallback logic so an empty
metaTitledefaults 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:
- 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>. - Template-driven with editor input — the developer builds schema selectors in the backoffice; editors fill fields; the template generates JSON-LD from them.
- 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.
AI summary
A condensed take on the Advanced version:
- 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. (Document Types, content tree, Razor templates; available as managed Umbraco Cloud or self-hosted). Its defining SEO trait: developer-led by default — unlike WordPress, even meta fields need a developer or a package.
- 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 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., 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. 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 dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding., advanced canonical logic.
- Packages: SeoToolkit (free, open-source, by patrickdemooij9 — meta fields, sitemapsA 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., 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, 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., canonicals) and SEO Checker (commercial, by Soeteman Software, not Jumoo — adds SERP/social previews, audits, per-culture 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.). URL Tracker for redirects.
- uMarketingSuite → Umbraco Engage (Nov 2024) is a CRO/personalization tool, not 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..
- hreflang is not automatic for Language Variants — implement in Razor or via SEO Checker; pair with self-referencing canonicals per variant.
- Reserved routing aliases aren’t interchangeable:
umbracoRedirectis a visible 302;umbracoInternalRedirectIdis the silent internal rewrite;umbracoUrlNamechanges the path suffix;umbracoUrlAliasmasks alternate paths. Built-in URL tracking covers a document’s own tracked URL changes, not arbitrary rewrites or complex migration scenarios. - Schema has three dev-led methods; Schema.NET helps .NET devs build 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.. A field existing in the backoffice doesn’t prove it’s rendered — check the actual template output, including inherited master templates.
- Umbraco 17 (Nov 2025) is the current LTS; 13, the prior LTS, is in its Security phase and reaches end of life Dec 2026. Umbraco 14 rebuilt the backoffice (AngularJS → TypeScript/Lit) — package compatibility tracks Umbraco majors, so verify your package’s release notes against your version. v12+ Content Delivery API enables headless (front-end injects metadata).
- The craft: build self-serve backoffice SEO controls (global script node, SEO tab on every DocType, URL Tracker, sitemap, robots.txt) before an SEO team arrives.
Official documentation
Primary-source documentation from Umbraco and the search engines.
Umbraco
- URL Tracking / Redirect Management — the official explanation of automatic 301 redirectsA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. on URL change.
- Routing properties — reserved aliases including
umbracoUrlNameandumbracoRedirect. - How to implement schema markup in Umbraco — the three official schema implementation methods.
- Is your CMS SEO-friendly? (Part 1: Website performance features) — Umbraco’s own SEO framing.
- Umbraco acquires uMarketingSuite — the acquisition behind the Umbraco Engage rebrand.
- Umbraco Cloud — the managed hosting option (Azure + Cloudflare).
Packages
- SeoToolkit (GitHub) — the free, open-source package: sitemapsA 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., 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, meta fields, 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..
- SEO Checker (Umbraco Marketplace) — Soeteman Software’s commercial package.
- Introduction to structured data markup — 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. as the preferred format; 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.
- Managing multi-regional and multilingual sites — 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. and
x-defaultguidance for Language Variants.
Quotes from the source
On-the-record statements from Umbraco’s docs and the Umbraco community.
Umbraco — automatic 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. on rename
- “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 RedirectA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank.’ response pointing to the new URL of the document.” — Umbraco official documentation, URL RedirectA 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. Management. Source
SeoToolkit — sitemapsA 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.
- “SeoToolkit creates a /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..xml for each domain and also a sitemap indexStoring 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. 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.” — SeoToolkit README. Source
SEO Checker — multilingual
- “SEOChecker adds SEO data per culture and will render language specific metadata such as HrefLang tagsHreflang 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. which allows you to tell Google about localized versions of your page.” — Umbraco community documentation, SEOChecker multilingual sitemap thread. Source
The community — making 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.-agency-friendly
- “Work smart, and modify your back office so that the SEO guys can do most of the work themselves.” — Tim Payne, Skrift Magazine, “How to Make Your Umbraco Site SEO Agency Friendly.” Source
- “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.” — 24 Days in Umbraco, 2024 edition, “Doing Great SEO With Umbraco: Can We Toast Yoast?” Source
Umbraco SEO setup checklist
What to put in place on an Umbraco site — ideally before an SEO team ever touches it:
- An SEO composition added to page Document Types:
metaTitle,metaDescription,noIndextoggle, optionalcanonicalUrl, 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 — with fallback to node name when empty. - Those fields actually rendered in the master template
<head>(the field existing in the backoffice does nothing until the template outputs it). - A package installed and configured — SeoToolkit (free) or SEO Checker (paid) — for sitemapsA 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., 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., and canonicals.
- 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. generating at
/sitemap.xml, listing only canonical, indexable URLs; submitted to Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. and Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility.. - 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. served (it isn’t by default) with a
Sitemap:reference. - URL Tracker installed so editors/SEOs manage 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. without developer tickets.
- For multilingual: 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. implemented (Razor or SEO Checker — it is not automatic) plus self-referencing canonicals per language variant.
- Structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding. implemented for key types (Article, Product, Organization, etc.); validated in 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.
- Trailing-slash and www/non-www consistency enforced via middleware/IIS rules (Umbraco won’t do it natively).
- A global SEO settings node for HEAD/BODY script injection (so GTM and tag changes don’t become developer tickets).
- Image Cropper + Slimsy in use for responsive, dimensioned, lazy-loaded images (helps LCPLargest Contentful Paint — render time of the largest visible image or text block, relative to when the page started loading. ≤2.5 s (at the 75th percentile) is good. and 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.).
- Package compatibility confirmed against your current Umbraco version before any upgrade — package releases track specific Umbraco majors (the v13→v14 backoffice rewrite is the classic case), and a version note from a year ago may no longer hold.
- If still on Umbraco 13: an upgrade plan in place before its December 2026 end-of-life date.
Umbraco SEO — cheat sheet
The three tiers of SEO support
| Feature | Status in Umbraco | How you get it |
|---|---|---|
| Clean URLs from node names | Built in | Automatic (ToUrlSegment()) |
| 301 redirectA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. on URL rename | Built in | Automatic (URL tracking) |
| 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.' / 404 handling | Built in | Automatic |
| Language Variants (multilingual content) | Built in | Settings → Languages |
| Meta title / description | Package or dev | SeoToolkit / SEO Checker / custom 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. | Package or dev | SeoToolkit / SEO Checker / custom Razor |
| 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. | Package or dev | SeoToolkit editor / manual file in /wwwroot/ |
| Canonical tagsA rel=\"canonical\" annotation — in the HTML <head> or an HTTP Link header — that tells search engines which URL is the preferred version of duplicate or near-duplicate content. / 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. | Package or dev | SeoToolkit / SEO Checker / custom |
| 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. | Custom dev or SEO Checker | Razor loop over cultures, or SEO Checker |
| Structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding. (schema) | Custom dev | Field-based / template / Schema.NET |
| Trailing-slash + www/non-www | Custom dev | ASP.NET Core middleware / IIS rewrite |
Packages, sorted
- SeoToolkit — free, open-source (patrickdemooij9). Releases track each Umbraco major (through Umbraco 18 as of mid-2026). Meta fields, sitemapsA 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. + index, 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, 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., canonicals. Default starting point.
- SEO Checker — commercial, by Soeteman Software. Also releases per Umbraco major (v18.0.1 current as of mid-2026, supporting Umbraco 18+). SERP/social previews, audits, broken-link detection, per-culture 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..
- URL Tracker — redirect management UI for migrations and restructures.
- uMarketingSuite → Umbraco Engage — CRO/analytics/A-B testing. Not SEO.
Don’t-get-it-wrong facts
- SEO Checker is by Soeteman Software, not Jumoo. Jumoo makes uSync.
- uMarketingSuite became Umbraco Engage (Nov 2024) — a marketing tool, not SEO.
- hreflang is not automatic for Language Variants.
- Umbraco serves no robots.txt by default.
- Umbraco 17 (Nov 2025) = current LTS. 13, the prior LTS, is Security-phase only and reaches end of life Dec 2026. 14 rebuilt the backoffice (AngularJS → Lit).
Reserved routing aliases — not interchangeable
umbracoUrlName— changes the path suffix (keep a long backoffice name, short URL).umbracoUrlAlias— comma-separated alternate paths that mask the real URL; no redirect.umbracoRedirect— a visible 302 redirect to another node.umbracoInternalRedirectId— the silent internal rewrite: content serves transparently, no redirect shown.
Umbraco SEO mistakes
- Assuming core Umbraco supplies a complete SEO layer. Define which controls come from custom document types, SeoToolkit, SEO Checker, or custom code.
- Installing overlapping packages without ownership rules. Two systems can emit duplicate canonicals, robots tags, or sitemapsA 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.. Assign one source for each signal.
- Letting every editor set arbitrary canonicals. Default to a computed self-canonical and expose overrides only for documented cases.
- Trusting automatic 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. without testing moves. Verify the old URL, status, hop count, and destination after renames and restructures.
- Calling Umbraco Engage an SEO package. Use it for its personalization/CRO purpose, not as a substitute for 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. controls.
Duplicate titles or canonical tags appear
Likely cause: a package and custom Razor layout both render the same signal. Fix: trace each output to its owner and remove the duplicate path. Confirm: raw HTML contains one intended title and canonical.
A renamed page does not redirect correctly
Likely cause: the redirectA 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. record was not created, a package rule conflicts, or cachingCaching stores a copy of a page or resource — in a browser, a CDN edge node, or a search crawler's own cache — so it can be served again without regenerating or re-downloading it. It isn't a direct ranking factor, but it feeds page speed and crawl efficiency. preserves the old response. Fix: inspect redirect management and clear the affected cache. Confirm: the old URL returns one 301 to the final canonical page.
Sitemap includes hidden or noindex content
Likely cause: generator filters ignore visibility, document type, or SEO properties. Fix: centralize an IsIndexable rule used by templates and 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. Confirm: sampled 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. URLs return canonical indexable 200 pages.
Language variants lack reciprocal hreflang
Likely cause: custom variant mapping is incomplete or uses inconsistent culture URLs. Fix: generate clusters from published variants and include self-references. Confirm: every alternate returns 200 and reciprocates the cluster.
The owner → default → override framework
For every SEO signal, document:
- Owner: core Umbraco, one named package, or custom code.
- Default: the safe behavior editors receive without touching a field.
- Override: the limited business case, validation rule, and person allowed to change it.
Apply the matrix to titles, descriptions, canonicals, robots directives, 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., sitemapsA 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., 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., and structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding.. This prevents package overlap and turns hidden developer assumptions into testable requirements.
Prove an Umbraco SEO release
Signal-ownership test
Test to run: inspect raw HTML across representative document types after a package or template change. Expected result: one title, canonical, robots directive, and intended structured-data set. Failure interpretation: packages or custom layouts overlap. Monitoring window: every SEO package/template release. Rollback trigger: duplicate or contradictory directives reach production.
Rename-and-redirect test
Test to run: rename a controlled test page and request the old URL without following 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.. Expected result: one 301 reaches the new canonical URLHow search engines pick one canonical URL among duplicates and consolidate signals onto it.. Failure interpretation: redirect tracking, routing, or cache behavior failed. Monitoring window: immediate. Rollback trigger: old links 404, loop, or land on the wrong page.
Sitemap/indexability test
Test to run: compare 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. URLs with the shared indexability rules and batch-check responses. Expected result: entries are canonical, public, indexable 200 pages. Failure interpretation: 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. filters and templates disagree. Monitoring window: every publish and release. Rollback trigger: private, 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., redirected, or missing URLs enter the sitemap at scale.
Version-scoped rendered-output acceptance suite
Test to run: after any Umbraco version, package, or template change, render one page per template, per locale/culture, and check the raw response HTML — not just the backoffice field values — for title, meta descriptionThe meta description is an HTML head tag — `<meta name=\"description\" content=\"…\">` — that suggests a short summary of the page for the search snippet. It's not a Google ranking factor, and Google rewrites it the majority of the time, but a good one can still lift click-through., canonical, 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. set, and routing-alias behavior (umbracoRedirect vs umbracoInternalRedirectId vs umbracoUrlAlias). Record which Umbraco major and which package version the test ran against. Expected result: every template/locale combination emits the intended signal with no gaps from an empty fallback path. Failure interpretation: a master-template inheritance or named-section change broke a child template’s output, a package update changed its renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., or a routing alias is being used for the wrong purpose. Monitoring window: every Umbraco or package version bump, and every new template added. Rollback trigger: any template/locale combination silently loses metadata, canonical, or 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. output — this test does not claim anything about crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor., 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., or rankings, only about what the server actually emits.
Patrick's relevant free tools
- SEO Incident Simulator — Practice thirty deterministic technical SEO incident investigations — indexability, crawl controls, redirects, sitemaps, markup, caching, DNS, bot verification, rendering, hreflang, and faceted navigation — with clearly labeled fixture evidence and Find → Fix → Verify handoffs.
- hreflang Generator + Linter — Enter your URL × locale matrix and get bidirectional hreflang markup as head tags, sitemap XML (auto-split past 50,000 URLs), and Link headers — linted live for wrong region codes, duplicates, and missing fallbacks. Runs entirely in your browser.
- returntag - hreflang checker — Enter one URL or an XML sitemap and the returntag - hreflang checker crawls the whole hreflang cluster — missing return tags, broken targets, self-reference and x-default checks, language-code validation, and head vs Link header vs sitemap disagreements — on an interactive cluster map with CSV export. The check Search Console's International Targeting report used to run.
Tools for Umbraco SEO
- SeoToolkit (free, open-source) — the default package: meta fields, dynamic sitemapsA 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. + 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. indexStoring 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., 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, redirectA 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. management, canonical support.
- SEO Checker by Soeteman Software (commercial) — backoffice SERP and social previews while editing, automated issue detection (missing meta, broken links, canonical problems), redirects, automatic 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./sitemap, per-culture 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..
- URL Tracker — redirect creation/editing, 404/302 monitoring, and recommendations based on similar URLs; essential for migrations.
- SeoVisualizer (free) — actively maintained (releases through Umbraco 17), not abandoned at older versions as some older write-ups suggest. Lightweight: title/description length hints, 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. toggle, real-time search-result preview in the backoffice.
- Schema.NET (NuGet library, not an Umbraco package) — strongly-typed C# classes for Schema.orgSchema markup is code that uses the schema.org vocabulary to label what your content means so search engines can understand it and show rich results. It's most often written in JSON-LD, and it's not a direct ranking factor. so developers build 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. from objects.
- Slimsy (+ Umbraco’s built-in Image Cropper) — responsive WebP/AVIF images 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.; helps LCPLargest Contentful Paint — render time of the largest visible image or text block, relative to when the page started loading. ≤2.5 s (at the 75th percentile) is good. and 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..
- Google Search ConsoleA free Google service that reports how a site performs in Google Search and surfaces problems with how Google crawls, indexes, and serves it. It's first-party data straight from Google — but you don't need it to appear in results. and Bing Webmaster ToolsMicrosoft's free portal for monitoring and improving how a site appears in Bing search — the peer to Google Search Console, plus IndexNow instant indexing, richer backlink data, and keyword volumes. Because Bing's index also feeds Microsoft Copilot, it doubles as a window into AI-search visibility. — submit your sitemap, watch 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. and crawl, validate 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..
- 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 — validate your structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding. before deploying.
- Umbraco Engage (formerly uMarketingSuite) — A/B testing and analytics that support SEO goals (engagement, page variants) — but 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. tool.
Test yourself: Umbraco SEO
Five quick questions on how SEO actually works on Umbraco. Pick an answer for each, then check.
Resources worth your time
My related writing
- Canonical Tags Explained: Why They Matter For SEO (Ahrefs) — the tag you’ll wire into Umbraco templates or get from a package.
- Hreflang: The Easy Guide for Beginners (Ahrefs) — what you have to implement by hand for Language Variants.
- How to Create an XML Sitemap (and Submit It to Google) (Ahrefs) — what SeoToolkit/SEO Checker generate for you.
- Core Web Vitals: A Complete Guide (Ahrefs) — the performance metrics the .NET baseline helps with.
My speaking
- How Search Works (SlideShare) — crawlingCrawling is how search engines use automated bots (like Googlebot and Bingbot) to discover URLs and download pages. A page has to be crawlable to be indexed, but crawling on its own isn't a ranking factor., renderingTurning HTML, CSS, and JavaScript into the final visual page and DOM., 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., and ranking, which underpins every 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. decision here. (My standing disclaimer applies: “This is my understanding of systems… not going to be 100% complete or accurate.”)
From around the industry
- URL Tracking / Redirect Management (Umbraco docs) — the official source on automatic 301s on rename.
- SeoToolkit (GitHub) — the free, open-source package and its 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./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./meta features.
- How to Make Your Umbraco Site SEO Agency Friendly (Tim Payne, Skrift Magazine) — the “build self-serve controls before handoff” playbook.
- Doing Great SEO With Umbraco: Can We Toast Yoast? (24 Days in Umbraco) — the structured-Document-Types-as-SEO-advantage argument.
- The Ultimate SEO How-To Guide for Umbraco CMS (Marcel Digital) — a thorough agency walkthrough of the package stack.
- How to implement schema markup in Umbraco (Umbraco) — the three official structured-data methods.
Umbraco SEO
Umbraco 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.
Related: Canonicalization, Duplicate Content
Umbraco SEO
Umbraco SEO refers to optimizing websites built on Umbraco, an 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. built on Microsoft’s .NET framework that’s popular with enterprise, agency, and .NET-shop builds. The defining trait — and the thing most guides skip — is that Umbraco is developer-led by default. Unlike WordPress, where a non-developer can install Yoast and manage SEO themselves, almost every meaningful SEO feature in Umbraco requires either a third-party package or custom template work by a .NET developer.
Out of the box Umbraco gives you a useful but narrow foundation: clean URL slugs generated from node names, automatic 301 redirectsA 301 redirect is the HTTP status code for a permanent move: it tells browsers and search engines a URL has moved for good, and it's the strongest signal for consolidating a page's ranking signals onto the new URL. Google says permanent redirects don't cause a loss in PageRank. when you rename a node’s URL, 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 codes404 Not Found is the HTTP client-error status code a server returns when it can't find the requested URL — RFC 9110 defines it as no current representation, or unwillingness to disclose one. A \"hard 404\" actually returns the 404 status; a \"soft 404\" returns a success code (like 200) for a page that's really gone. 404s are normal and expected: the fact that some URLs 404 doesn't affect your site's other, successful pages, and Google de-indexes 404'd URLs over time (probably retrying for some period, less and less often)., and a sophisticated multilingual content model (Language Variants). What it does not ship: meta title/description fields, 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., 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. management, canonical-tag controls, 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. toggles, hreflang tagsHreflang 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., or structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding.. Those come from packages — SeoToolkit (free, open-source) or SEO Checker by Soeteman Software (commercial) — or from custom Razor code.
The built-in auto-301-on-rename is genuinely strong (better than most CMSes provide), and Umbraco’s structured Document Types make consistent metadata and accurate schema markupSchema markup is code that uses the schema.org vocabulary to label what your content means so search engines can understand it and show rich results. It's most often written in JSON-LD, and it's not a direct ranking factor. easier to generate at scale than WordPress’s freeform editor. The cost is developer dependency: the practical work of “doing SEO” on Umbraco is largely about building self-serve controls into the backoffice before an SEO team ever touches the site.
Related: Canonicalization, Duplicate Content
Build-time retrieval analysis plus live signals for this exact article. The automatic chunk report includes a deterministic readiness score and is ready without a model download.
Search Console
sampleGA4 traffic (28d)
sampleCloudflare traffic (7d)
sampledCrUX field data (28d, phone)
sampleGoogle NLP entities
localChangelog
Revision history
Compare the published article with an archived editorial snapshot. Added and removed words are shown only after you open a comparison.
Updated Jul 19, 2026.
Editorial summary and recorded change details.Summary
Fixed a dead outbound citation: Ahrefs' XML sitemaps blog post URL now 404s.
Change details
-
Replaced the dead link to Ahrefs' XML sitemaps guide (ahrefs.com/blog/xml-sitemaps/, now 404) with Ahrefs' current live sitemap guide (ahrefs.com/blog/how-to-create-a-sitemap/) in all three occurrences (inline mention, tools paragraph, and Resources list).
Full comparison unavailable — no prior snapshot was archived for this revision.
Updated Jul 18, 2026.
Editorial summary and recorded change details.Summary
Corrected the reserved routing-alias semantics (umbracoRedirect is a 302, not an internal rewrite) and refreshed the whole article for Umbraco's current LTS/STS version landscape — Umbraco 17, not 13, is now the current LTS, and 13 is approaching its December 2026 end of life.
Change details
-
Fixed the umbracoRedirect/umbracoInternalRedirectId mix-up: umbracoRedirect sends a visible 302 redirect, while umbracoInternalRedirectId performs the silent internal rewrite (the article previously attributed the rewrite behavior to umbracoRedirect). Added umbracoUrlAlias for completeness and noted built-in URL tracking doesn't cover arbitrary rewrites or complex migration scenarios.
-
Replaced 'Umbraco 13 is the current LTS' throughout (frontmatter tldr, both TL;DRs, ai-summary, cheat sheet, and the dedicated version section) with the current landscape: Umbraco 17 (Nov 2025) is the current LTS, Umbraco 13 is in its Security phase with a December 2026 end-of-life date, and STS releases (15/16/18) exist between LTS majors.
-
Updated SeoToolkit and SEO Checker version-range claims (previously static 'v9–v17'/'v8–v17') to reflect that each package now ships a release per Umbraco major, currently up through Umbraco 18; corrected SeoVisualizer's stated range (was 'v8–v15') since it's actively maintained through Umbraco 17.
-
Added a note to the metadata workflow section that a Document Type field having a value doesn't prove it's rendered — output is owned by the template, including master-template inheritance and named sections — and added a version-scoped rendered-output validation test.