uTPro.Feature.UrlViewer 2.0.0

dotnet add package uTPro.Feature.UrlViewer --version 2.0.0
                    
NuGet\Install-Package uTPro.Feature.UrlViewer -Version 2.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="uTPro.Feature.UrlViewer" Version="2.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="uTPro.Feature.UrlViewer" Version="2.0.0" />
                    
Directory.Packages.props
<PackageReference Include="uTPro.Feature.UrlViewer" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add uTPro.Feature.UrlViewer --version 2.0.0
                    
#r "nuget: uTPro.Feature.UrlViewer, 2.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package uTPro.Feature.UrlViewer@2.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=uTPro.Feature.UrlViewer&version=2.0.0
                    
Install as a Cake Addin
#tool nuget:?package=uTPro.Feature.UrlViewer&version=2.0.0
                    
Install as a Cake Tool

uTPro SEO Audit for Umbraco

Formerly uTPro URL Viewer. Same package (uTPro.Feature.UrlViewer), now a full SEO & site auditor.

Crawl and audit your whole site for SEO, broken links, images and resources, accessibility, content quality and carbon — with a per-run health score, prioritised issues, per-page detail and CSV export, right in the Umbraco backoffice. Also includes a fetch as Googlebot / Bingbot URL Viewer tool for inspecting the redirect chain, response headers, HTML source, cloaking and spam/hack signals.

Supports Umbraco 16, 17 and 18.

NuGet NuGet Downloads Umbraco Marketplace Umbraco 16+ License: MIT

uTPro SEO Audit for Umbraco

Highlights

  • Whole-site crawl & audit of every Content and Media URL (plus sitemap.xml).
  • Broken link, image and resource detection with status codes.
  • Rich per-page audit: SEO, social, technical SEO, content quality, accessibility and carbon.
  • Health score, prioritised issues, orphaned & duplicate detection, CSV export.
  • Fetch-as-Googlebot URL Viewer for redirect, header, HTML and cloaking inspection.
  • Runs in the background, scheduled and on-demand, secured behind the backoffice.

Site Audit

A recurring background job crawls every Content and Media URL on the site (and, optionally, URLs found in sitemap.xml), then stores a summary report per run — never the full HTML.

  • Broken links, images & resources — every <a>, <img> and stylesheet/script/font is checked for a valid status code (and size); 4xx/5xx are recorded per page and listed in the report.
  • Health score per run plus an Overview of totals (pages, links, images, resources, broken, orphaned, duplicate).
  • Issues view grouped by category, with severity, type and priority.
  • Orphaned pages (no internal link points to them) and duplicate content (identical content) detection.
  • Incremental scans — scheduled runs skip pages unchanged since the last run (via ETag / Last-Modified) and carry the previous result forward.
  • Respects robots.txt (disallow rules + Sitemap: discovery) and supports include/exclude URL patterns.
  • Core Web Vitals (optional) — collected per page via the Google PageSpeed Insights API (no local browser); see the per-page audit below.
  • Standing Error URLs list — re-scan a single failing URL or all of them on demand.
  • CSV export of any run's results.
  • Extensible checks — implement IUrlScanIssue (with Type and Priority) and register it in DI; it appears automatically in the Issues view.

Per-page audit

Each scanned URL is analysed and the full detail is viewable in a per-page panel:

  • SEO — title (+ length), meta description (+ length), canonical, H1 and the H2/H3 lists, noindex / nofollow, lang.
  • Social — Open Graph and Twitter Card tags; Facebook / Twitter / LinkedIn pixels and Google Analytics detection; social profile links.
  • Technical SEO — content type, charset, compression (gzip/br), browser caching, HTTPS, schema.org markup (and type), viewport and favicon.
  • Content — word and paragraph counts, readability (Flesch), keyword density and a thin-content flag.
  • Accessibility — aria-label / aria-describedby counts, skip-to-content link, heading structure, lang and inputs missing a label.
  • Carbon — estimated grams of CO₂e per page view with an A–F rating.
  • Core Web Vitals (optional, via PageSpeed Insights) — Lighthouse performance score, LCP, CLS, FCP, TBT, Speed Index, plus real-user field data (LCP/CLS/INP) when available.

Built-in issue checks

HTTP errors, server errors, broken links, broken resources, missing / too-long meta description, missing H1, missing H2, nofollow, noindex, canonicalised URLs, orphaned pages, thin content, duplicate content, images missing alt text, high carbon intensity, spam/hack keywords, cloaking and JavaScript errors.

URL Viewer tool

Fetch any URL as a chosen client and inspect exactly what it returns:

  • User agents — Googlebot (smartphone/desktop), Bingbot, Chrome, Firefox, Edge.
  • Full redirect chain — every hop with its status code and raw response headers.
  • HTML source viewer — line numbers, wrap toggle, copy to clipboard, spam-word highlighting.
  • Content analysis — meta tags (incl. <title>), spam/hack keywords, hidden CSS (a common cloaking trick) and JavaScript issues (eval, document.write, innerHTML, base64 obfuscation, mixed content, mismatched <script> tags and more).
  • Cloaking detection — compares what a bot sees versus what Chrome sees (title, status code and content-size differences).
  • VirusTotal link for the fetched domain.

Per-node Audit tab

  • Adds an SEO Audit tab in the Content and Media editors, right after the Info tab.
  • Shown only for users with Settings access, and only when the node has a public, routable URL (folders / unrouted nodes don't show it).
  • Opening a node auto-audits its own URL(s) in the background and raises a warning notification if a problem is found, so editors notice issues without leaving the node. A manual Re-scan is available inside the tab.

Security

Everything lives in the Umbraco backoffice and requires Settings section access. All API calls go through the authenticated Umbraco Management API under /umbraco/management/api/v1/utpro/... — there is no public endpoint.

Fetches run server-side behind an SSRF guard that blocks private/local addresses (localhost, RFC-1918 ranges, link-local 169.254.x.x, IPv6 loopback/ULA, .local, …). The guard resolves DNS and re-checks every redirect hop.

Installation

dotnet add package uTPro.Feature.UrlViewer

Usage

Open the backoffice, go to the Settings section and find SEO Audit under the Advanced menu. It has three views:

  • URL Viewer — enter a URL, pick the scheme, user agent and referrer, then run the fetch to see the redirect chain, headers, HTML source and analysis.
  • Site Audit — trigger and inspect crawls of all Content & Media URLs; browse the latest report, health score, issues and per-page detail, and export to CSV.
  • Error URLs — the standing list of failing URLs, with one-click re-scan (single or all).

You'll also find an SEO Audit tab directly inside each Content and Media editor (after the Info tab) that audits the node's own URL(s) when you open it.

Configuration

The URL Viewer tool needs no configuration. The recurring Site Audit is configured under uTPro:Feature:UrlViewer:SiteScan in appsettings.json (all keys optional — defaults shown):

{
  "uTPro": {
    "Feature": {
      "UrlViewer": {
        "SiteScan": {
          "Enabled": true,
          "Period": "24:00:00",
          "Delay": "00:05:00",
          "MaxConcurrency": 4,
          "ThrottleDelayMs": 150,
          "SkipCloakingCheck": true,
          "AllowInternalHosts": false,
          "AllowInvalidCertificates": false,
          "RedirectWarningThreshold": 3,
          "MaxRunHistory": 20,
          "CheckLinks": true,
          "CheckExternalLinks": true,
          "CheckImages": true,
          "LinkCheckTimeoutSeconds": 15,
          "MaxLinkChecksPerRun": 5000,
          "UseIncrementalScan": true,
          "UseSitemapDiscovery": true,
          "RespectRobotsTxt": true,
          "ExcludePatterns": [],
          "IncludePatterns": [],
          "CollectCoreWebVitals": false,
          "PageSpeedApiKey": "",
          "PageSpeedStrategy": "mobile"
        }
      }
    }
  }
}
Key Default Description
Enabled true Master switch for the recurring audit job.
Period 24:00:00 How often the audit runs (d.hh:mm:ss).
Delay 00:05:00 Delay before the first run after startup.
MaxConcurrency 4 Max concurrent HTTP fetches (clamped 1–20).
ThrottleDelayMs 150 Delay after each fetch, in ms.
SkipCloakingCheck true Skip the bot-vs-Chrome cloaking check during bulk audits (faster).
AllowInternalHosts false Security: relax the SSRF guard to allow scanning private/local addresses. Only enable when the site runs on an internal host.
AllowInvalidCertificates false Security: accept invalid/untrusted TLS certificates (self-signed dev certs, hostname mismatch). Only enable for internal/dev sites.
RedirectWarningThreshold 3 Redirect-hop count above which a result is flagged as a long chain.
MaxRunHistory 20 Audit runs retained in the DB before old runs are pruned.
CheckLinks true Check the status code of links found on each page.
CheckExternalLinks true Also check external (third-party) links. Set false to avoid any outbound requests.
CheckImages true Check image URLs found on each page.
LinkCheckTimeoutSeconds 15 Per-request timeout when checking a link/image/resource (clamped 1–60).
MaxLinkChecksPerRun 5000 Safety cap on the number of distinct link/image/resource URLs checked per run.
UseIncrementalScan true Scheduled runs skip unchanged pages (ETag / Last-Modified) and carry the previous result forward.
UseSitemapDiscovery true Also discover URLs from the site's sitemap.xml (and Sitemap: directives in robots.txt).
RespectRobotsTxt true Skip paths disallowed by robots.txt and use its Sitemap: directives for discovery.
ExcludePatterns [] URL patterns to exclude (wildcards * / **), e.g. "/admin/*", "*.pdf".
IncludePatterns [] If set, only URLs matching these patterns are scanned.
CollectCoreWebVitals false Collect Core Web Vitals per page via the Google PageSpeed Insights API (requires a key; adds one API call per page, so it's slower).
PageSpeedApiKey "" Google PageSpeed Insights API key (required for Core Web Vitals).
PageSpeedStrategy mobile PageSpeed strategy: mobile or desktop.

Screenshots

Site Audit — crawl every Content & Media URL and browse the report, health score and issues

Site Audit view

URL Viewer — fetch a URL as any bot/browser and inspect the redirect chain, headers, HTML source and analysis

URL Viewer tool

Error URLs — the standing list of failing URLs, with one-click re-scan (single or all)

Error URLs view

Repository layout

uTPro.Feature.UrlViewer/
├─ src/
│  ├─ uTPro.Feature.UrlViewer/          # the NuGet package (ships to the Umbraco Marketplace)
│  └─ uTPro.Feature.UrlViewer.TestSite/ # a demo Umbraco site that references the package
├─ pack.ps1                             # deterministic clean pack -> Build/
├─ umbraco-marketplace.json
└─ uTPro.Feature.UrlViewer.sln

Building the package

pwsh ./pack.ps1

This wipes bin/obj, does a clean Release pack into Build/, and evicts the version from the local NuGet cache so consumers on the same machine re-extract the fresh bits.

License

MIT

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.0.0 0 7/26/2026
1.1.1 113 7/21/2026
1.1.0 112 7/20/2026
1.0.0 89 7/17/2026

v2.0.0: Renamed to "uTPro SEO Audit" (package id unchanged). Adds a full per-page audit — SEO (title/meta/canonical/H1-H3/noindex/nofollow/lang), Open Graph & Twitter cards, tracking-pixel detection, technical SEO (charset/gzip/caching/https/schema.org/viewport/favicon), content metrics (paragraphs, readability, keyword density, thin content), a static accessibility subset (aria, skip-link, heading structure, unlabelled inputs) and estimated carbon emissions with an A-F rating. Also adds broken-resource checking, orphaned-page and duplicate-content detection, a per-page detail panel, a run overview and CSV export. Adds robots.txt support (disallow rules + Sitemap discovery), include/exclude URL patterns, and optional Core Web Vitals per page via the Google PageSpeed Insights API (no local browser). Audit issues gain Type/Priority and now cover server errors, broken resources, canonicalised URLs, missing/too-long meta description, missing H1/H2, nofollow, noindex, orphaned, thin and duplicate content, carbon intensity and poor Core Web Vitals.
v1.2.0: Site Audit gains broken link & image (missing alt) checking per page, on-page SEO capture (title, meta description, canonical, H1, noindex, word count), a per-run health score and grouped Issues view, incremental scans that skip unchanged pages (ETag/Last-Modified), optional sitemap.xml discovery, and an extensible IUrlScanIssue model for custom checks. New config keys: CheckLinks, CheckExternalLinks, CheckImages, LinkCheckTimeoutSeconds, MaxLinkChecksPerRun, UseIncrementalScan, UseSitemapDiscovery.
v1.1.0: Adds a per-node audit tab in the Content and Media editors (after the Info tab, only for users with Settings access and only when the node has a public URL). Opening a node auto-audits its own URL(s) in the background and raises a warning notification if a problem is found. All API stays backoffice-secured under /umbraco.
v1.0.0: URL Viewer + Site Audit. Backoffice-secured tool (Settings section, under /umbraco) to fetch a URL as different user agents, follow the redirect chain, view headers/HTML source, and run spam/hidden-CSS/meta/JavaScript analysis with cloaking detection. Adds a recurring Site Audit job (auto-discovered by uTPro Job Monitor) that scans all Content/Media URLs, stores summary reports in the database, maintains a standing error-URL list, and supports on-demand re-scan of individual or all failing URLs.