You uploaded an SVG favicon, two PNG fallbacks, and an ICO for legacy browsers — and Safari keeps showing the ICO in your tab. The files are fine. The problem is the order of your favicon link tags.

Browsers don't grab the first <link> tag they see. According to the WHATWG HTML specification, the user agent picks the most appropriate icon based on the sizes, media, and type attributes. When multiple icons match equally, the browser may use the last one declared. That makes the order of your link tags a real lever, not a stylistic choice.

Prerequisites

You need access to your site's HTML <head> and at least two favicon files ready (SVG, PNG, or ICO). A basic grasp of HTML link tags helps — for a refresher, see our favicon HTML code examples cheat sheet.

Step-by-step: ordering multiple favicon link tags

Step 1: Understand browser selection rules

Browsers score each declared icon against their current context: display density, tab size, dark mode preference, and supported formats. The best match wins. Ties default to the last matching declaration. A poorly-ordered stack can cause modern browsers to skip your crisp SVG and grab a blurry PNG — even when they fully support vectors.

Step 2: Order from most specific to most general

Place your most capable format first and your universal fallback last:

&lt;link rel='icon' type='image/svg+xml' href='/icon.svg'&gt;
&lt;link rel='icon' type='image/png' sizes='32x32' href='/icon-32.png'&gt;
&lt;link rel='icon' type='image/png' sizes='16x16' href='/icon-16.png'&gt;
&lt;link rel='icon' href='/favicon.ico'&gt;

The SVG goes first because it scales to any pixel density. PNG fallbacks follow for browsers that don't support SVG favicons. The ICO sits at the end as a universal safety net for legacy systems that don't declare a format.

Step 3: Add type attributes to remove ambiguity

Without type, the browser may assume ICO format (the historical default) and skip your PNG or SVG entirely. Adding type='image/svg+xml' or type='image/x-icon' tells the browser exactly what to expect, so it can skip incompatible files without downloading them.

Step 4: Use sizes to match real-world contexts

The sizes attribute describes which rendering contexts each icon targets. A 16×16 PNG is right for browser tabs. A 32×32 PNG fits taskbars and high-DPI bookmark bars. For iOS home screens, declare a separate Apple Touch Icon:

&lt;link rel='apple-touch-icon' sizes='180x180' href='/apple-touch-icon.png'&gt;

Apple Touch Icons follow a different selection path and don't compete with regular favicons for the tab slot — so order them after your main favicon stack.

Step 5: Place dark mode SVGs at the top

If you support dark mode, the media attribute lets you declare two SVG variants:

&lt;link rel='icon' type='image/svg+xml' href='/icon-light.svg' media='(prefers-color-scheme: light)'&gt;
&lt;link rel='icon' type='image/svg+xml' href='/icon-dark.svg' media='(prefers-color-scheme: dark)'&gt;
&lt;link rel='icon' type='image/svg+xml' href='/icon.svg'&gt;

Only one media query matches in any given environment, so the browser picks that one. The unfiltered SVG acts as a final fallback for browsers that don't honor media queries at all.

Common pitfalls

Wrap-up

Order matters because browsers pick the best-matching icon from your stack, and ties go to the last declaration. Put your best format first, your fallbacks after, and add type and sizes attributes to remove all ambiguity. If your icon still doesn't update after reordering, the next suspect is usually the cache. Use Mzu favicondl to generate a clean, correctly-sized icon package and skip the manual resize steps entirely.