fix(branding): point HTML favicon link at /favicon.ico (the real Safari fix)

index.html hardcoded <link rel=icon href=/favicon-32x32.png>. When the HTML
declares a favicon link, the browser uses it and NEVER requests /favicon.ico
— so Safari showed the bundled default and our dynamic backend route was
never hit (direct /favicon.ico was correct, but the tab wasn't). DynamicFavicon's
JS swap is exactly what Safari ignores.

Point the link at /favicon.ico (backend dynamic route) + add apple-touch-icon,
no type/sizes so the response content-type wins. Now the configured favicon
shows from first paint in every browser, Safari included.
This commit is contained in:
Luca
2026-06-03 19:01:55 +02:00
parent 7ccfdc1aea
commit c60e34ecae
+9 -1
View File
@@ -2,7 +2,15 @@
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
<!-- Point the favicon at the backend's dynamic /favicon.ico route so the
admin-configured branding favicon is used from the very first paint,
in every browser. CRITICAL: a hardcoded href here (e.g. the bundled
/favicon-32x32.png) makes the browser use THAT and never request
/favicon.ico — Safari then shows the default and ignores the JS that
DynamicFavicon uses to swap it. No type/sizes so the byte stream
(png/ico/svg) is honoured via the response content-type. -->
<link rel="icon" href="/favicon.ico" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
<!--
Static fallback title + Open Graph defaults (#521).