diff --git a/changelog.d/3175-header-simple-welcome-title.fixed.md b/changelog.d/3175-header-simple-welcome-title.fixed.md
new file mode 100644
index 0000000000..2dbb695f58
--- /dev/null
+++ b/changelog.d/3175-header-simple-welcome-title.fixed.md
@@ -0,0 +1 @@
+- The fresh-install welcome page no longer renders a browser tab titled `Wheels - Error`; `_header_simple.cfm` now defaults its `
` to `Wheels` and the error handler overrides it for error screens (#3175)
diff --git a/vendor/wheels/events/EventMethods.cfc b/vendor/wheels/events/EventMethods.cfc
index faeccc52d3..a2dfb17fd8 100644
--- a/vendor/wheels/events/EventMethods.cfc
+++ b/vendor/wheels/events/EventMethods.cfc
@@ -99,7 +99,13 @@ component extends="wheels.Global" implements="wheels.interfaces.events.EventHand
$header(name = "Content-Type", value = "text/xml");
local.rv = $toXml(local.wheelsError);
} else {
- // Default HTML error display
+ // Default HTML error display. The shared _header_simple.cfm
+ // partial defaults its to "Wheels" (the fresh-install
+ // welcome page, #3175); override it here so error screens keep
+ // their error-specific title.
+ if (StructKeyExists(request, "wheels") && IsStruct(request.wheels)) {
+ request.wheels.pageTitle = "Wheels - Error";
+ }
if (!StructKeyExists(request.wheels, "internalHeaderLoaded")) {
local.rv &= $includeAndReturnOutput($template = "/wheels/public/layout/_header_simple.cfm");
}
diff --git a/vendor/wheels/public/layout/_header_simple.cfm b/vendor/wheels/public/layout/_header_simple.cfm
index 7e6a5c4838..2c13ff6760 100644
--- a/vendor/wheels/public/layout/_header_simple.cfm
+++ b/vendor/wheels/public/layout/_header_simple.cfm
@@ -30,13 +30,30 @@ if (!StructKeyExists(application.wheels, "iconsFontDataUri")) {
}
}
}
+
+// Page for this shared chrome. Defaults to "Wheels" — the
+// fresh-install welcome page (congratulations.cfm) leaves it at the
+// default. The error handler (EventMethods.$runOnError) sets
+// request.wheels.pageTitle = "Wheels - Error" before including this
+// partial so error screens keep their error-specific title.
+// Issue ##3175: the title was hardcoded to "Wheels - Error", so every
+// successful first boot rendered a browser tab titled "Error".
+local.simpleHeaderTitle = "Wheels";
+if (
+ StructKeyExists(request, "wheels")
+ && IsStruct(request.wheels)
+ && StructKeyExists(request.wheels, "pageTitle")
+ && Len(Trim(request.wheels.pageTitle))
+) {
+ local.simpleHeaderTitle = request.wheels.pageTitle;
+}
- Wheels - Error
+ #EncodeForHTML(local.simpleHeaderTitle)#