Technical SEO in Umbraco: a practical checklist
Technical SEO is not a package you install afterwards - it is decided in the architecture. Ten points I build every Umbraco solution to: canonical, hreflang, sitemaps, structured data, status codes, performance, and the mistakes I meet most often in existing solutions.
Technical SEO is decided in the architecture, not bolted on afterwards
My firm view after many years with Umbraco: technical SEO is not something you "add" with a package once the site is finished. It is decided by how the solution is built – in routing, in templates, in middleware, and in what the CMS lets editors do. That is why two sites on the same platform can perform completely differently in search results.
Here is the checklist I build to myself. It is written for Umbraco, but most of it applies to any .NET-based website.
The checklist
- A canonical on every page. Self-referencing canonical links, always with the same protocol and hostname as the public site. Query strings and trailing-slash variants should resolve to a single canonical URL.
- hreflang for every language variant. If you run Swedish and English, every page should point out both variants – with return links. An hreflang tag without a matching tag on the target page is ignored by Google. In Umbraco this is generated from the language variants, not from a hand-written list.
- A dynamic XML sitemap. Generated from the content tree on every request, never a static file. Pages set to noindex must not appear in the sitemap – conflicting signals are worse than no signals.
- A dynamic robots.txt with environment protection. Production allows crawling; every other environment blocks it. I have taken over more than one Umbraco solution where the staging environment sat fully indexed in Google next to the production site.
- Structured data in two layers. A site-wide graph (Organization, WebSite, Person) rendered from the master template, plus page-type-specific nodes per template: BlogPosting on articles, Service on service pages, FAQPage where there are real questions. One CMS field per page for the page-specific part, so it is versioned along with the content.
- Title and description as CMS fields. The editor should control title, meta description and og variants per page and per language – with sensible fallbacks when the fields are empty.
- Status codes that tell the truth. Removed pages should return a 301 to the closest replacement or a real 404 – not a 200 page that says "this page does not exist". www and https redirects belong in middleware, as a single hop, not a chain.
- Performance as the default state. Core Web Vitals should be green without a special effort: webp images at the correct dimensions, minified assets, and cache headers with max-age=31536000 and immutable for static files. This site measures green across all vitals – that is the result of defaults, not of an optimization sprint.
- Semantic HTML and heading hierarchy. One H1 per page, heading levels in order, real landmarks. Accessibility and technical SEO share most of the same foundation – and as of the EAA, accessibility is a legal requirement for many.
- Protect the structure from mistakes. The CMS should make the right thing easy: the block architecture should not allow two H1s, image fields should force an alt-text decision, and internal links should follow along when pages change URL.
The three mistakes I meet most often in existing Umbraco solutions
Static sitemaps that have not been updated since launch. hreflang without return links, usually after a language variant was unpublished. And indexed test or staging environments – the most common and most unnecessary mistake of all. All three are architecture mistakes, not content mistakes: they happen because the SEO structure was built as a one-off effort instead of as part of the platform.
Want to know where your solution stands?
This checklist is built into the KindbergCo platform from the start – that is how I avoid redoing the same work in every project. If you run an existing Umbraco solution and want to know how it holds up, finding out is quick: a technical review shows what is broken, what it means, and in what order it should be fixed. Get in touch using the form below.
Let’s discuss your project
Need help with web development, Umbraco CMS, SEO, performance, or technical improvements to an existing website? Send a message using the form below, and we can have a virtual coffee to discuss your needs and the best way forward.