<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: favicon.now</title>
    <description>The latest articles on DEV Community by favicon.now (@faviconnow).</description>
    <link>https://dev.to/faviconnow</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4236704%2F29323f9b-d8f4-4c90-9496-fd69bd785f64.png</url>
      <title>DEV Community: favicon.now</title>
      <link>https://dev.to/faviconnow</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/faviconnow"/>
    <language>en</language>
    <item>
      <title>Favicon not showing? A debugging checklist for browsers, Google and home screens</title>
      <dc:creator>favicon.now</dc:creator>
      <pubDate>Tue, 10 Nov 2026 14:50:59 +0000</pubDate>
      <link>https://dev.to/faviconnow/favicon-not-showing-a-debugging-checklist-for-browsers-google-and-home-screens-3icl</link>
      <guid>https://dev.to/faviconnow/favicon-not-showing-a-debugging-checklist-for-browsers-google-and-home-screens-3icl</guid>
      <description>&lt;p&gt;You shipped a new favicon. Your browser tab still shows the old one, Google shows a grey globe, and the icon on your phone's home screen is a blurry screenshot of your page. Favicons are tiny, but they fail in more places than almost any other asset, because several different systems fetch and cache them independently.&lt;/p&gt;

&lt;p&gt;I build favicon.now, a favicon generator and checker, and most "it's broken" reports we see come down to the same handful of causes. This is the checklist I work through, roughly in order from most to least likely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1: The files themselves
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Open every icon URL directly.&lt;/strong&gt; Paste &lt;code&gt;https://yoursite.com/favicon.ico&lt;/code&gt;, your PNG icons, your &lt;code&gt;apple-touch-icon.png&lt;/code&gt; and your &lt;code&gt;site.webmanifest&lt;/code&gt; into the address bar. Each should return HTTP 200 and the right content. A surprising number of "invisible" favicons are simply 404s, or a redirect to a login page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Check the content type.&lt;/strong&gt; Your server should send &lt;code&gt;image/x-icon&lt;/code&gt; or &lt;code&gt;image/vnd.microsoft.icon&lt;/code&gt; for ICO, &lt;code&gt;image/png&lt;/code&gt; for PNG, &lt;code&gt;image/svg+xml&lt;/code&gt; for SVG, and &lt;code&gt;application/manifest+json&lt;/code&gt; for the manifest. Some servers send SVG as &lt;code&gt;text/plain&lt;/code&gt; or &lt;code&gt;application/octet-stream&lt;/code&gt;, and browsers may refuse to use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Make sure the file is what its extension says.&lt;/strong&gt; A PNG renamed to &lt;code&gt;.ico&lt;/code&gt; sometimes works and sometimes does not. A real ICO file contains one or more embedded frames; inspect it and confirm it actually has the sizes you expect, such as 16, 32 and 48 pixels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Keep SVG favicons self-contained.&lt;/strong&gt; An SVG favicon that references external fonts, images or stylesheets may render blank. Inline everything, keep it simple, and always pair it with a PNG or ICO fallback.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 2: The HTML
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;5. Inspect the rendered head, not the template.&lt;/strong&gt; Frameworks, CMS plugins and theme files often inject their own &lt;code&gt;&amp;lt;link rel="icon"&amp;gt;&lt;/code&gt; tags. View the final page source or use dev tools and look for duplicate or conflicting declarations. The browser will pick one, and it may not be yours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Use root-relative paths.&lt;/strong&gt; &lt;code&gt;href="favicon.png"&lt;/code&gt; works on the homepage and breaks on &lt;code&gt;/blog/post-1/&lt;/code&gt;, where the browser looks for &lt;code&gt;/blog/post-1/favicon.png&lt;/code&gt;. Use &lt;code&gt;href="/favicon.png"&lt;/code&gt; instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Declare sizes and types honestly.&lt;/strong&gt; A minimal, modern set looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/favicon.svg"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"image/svg+xml"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"any"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/favicon-48x48.png"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"image/png"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"48x48"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/favicon.ico"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"any"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/apple-touch-icon.png"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"180x180"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"manifest"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/site.webmanifest"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the &lt;code&gt;sizes&lt;/code&gt; attribute says 32x32 and the file is 512x512, some clients will skip or mis-scale it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Keep &lt;code&gt;/favicon.ico&lt;/code&gt; at the root anyway.&lt;/strong&gt; Some clients request &lt;code&gt;/favicon.ico&lt;/code&gt; directly without reading your HTML. Having a valid file there is cheap insurance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 3: Caching
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;9. Assume the browser is lying to you.&lt;/strong&gt; Browsers cache favicons aggressively and separately from the page. A normal reload often will not refresh it. Try a private window, open the icon URL directly and hard-refresh it, or test in a browser you have not used on the site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Version the URL when you change the icon.&lt;/strong&gt; Changing &lt;code&gt;/favicon.svg&lt;/code&gt; to &lt;code&gt;/favicon.svg?v=2&lt;/code&gt; in your HTML forces clients that read the HTML to fetch a fresh copy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;11. Purge your CDN.&lt;/strong&gt; If your site sits behind a CDN with long cache lifetimes on static files, the old icon can keep being served even after you deploy. Purge the icon paths explicitly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 4: Google Search
&lt;/h2&gt;

&lt;p&gt;Google's favicon in search results is fetched by its own crawler on its own schedule, so it is the slowest to update.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;12. Meet the basic requirements.&lt;/strong&gt; Google's documentation asks for a square icon (1:1), at least 8x8 pixels, with a recommendation to go larger than 48x48. It should be declared with a &lt;code&gt;&amp;lt;link rel="icon"&amp;gt;&lt;/code&gt; tag on the homepage, and the icon URL should be stable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;13. Make sure Google can crawl it.&lt;/strong&gt; Check that &lt;code&gt;robots.txt&lt;/code&gt; does not block the icon file or the homepage. Both Googlebot and Googlebot-Image need access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14. Wait.&lt;/strong&gt; After fixing everything, it can take days or weeks for the icon in search results to change. Requesting a recrawl of your homepage in Search Console can help, but there is no instant switch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 5: Home screens and installed apps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;15. Provide a real Apple touch icon.&lt;/strong&gt; iOS uses &lt;code&gt;apple-touch-icon&lt;/code&gt; (180x180) for "Add to Home Screen". Without it, you may get a screenshot or a generic letter tile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;16. Validate the manifest.&lt;/strong&gt; For Android and installable PWAs, the manifest should list at least 192x192 and 512x512 icons. Use separate entries for &lt;code&gt;"purpose": "any"&lt;/code&gt; and &lt;code&gt;"purpose": "maskable"&lt;/code&gt; rather than one image marked &lt;code&gt;"any maskable"&lt;/code&gt;, because a maskable icon needs extra padding that looks wrong when shown unmasked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;17. Respect the maskable safe zone.&lt;/strong&gt; Android may crop maskable icons into circles, squircles or other shapes. Keep essential artwork inside the central safe area or your logo loses its edges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;18. Reinstall to test.&lt;/strong&gt; Home screen icons are captured at install time. To see a new icon, remove the shortcut or app and add it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 6: Does it actually look right?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;19. Check contrast on light and dark browser chrome.&lt;/strong&gt; A transparent black logo disappears on a dark tab bar. A transparent white one vanishes on a light one. Either add a background shape or test both modes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;20. Judge it at 16 pixels.&lt;/strong&gt; A design that looks great at 512 pixels may turn into mush in a tab. Simplify until it survives the smallest size.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I run this checklist
&lt;/h2&gt;

&lt;p&gt;Most of these checks are things you can do with dev tools and curl. To make it faster, we built the inspection side of favicon.now around this list: a live site checker, a Google favicon checker, an ICO inspector that shows every embedded frame, a manifest validator, a contrast checker, and an HTML code generator that writes the head tags. When the files themselves are the problem, the generator produces the full package (SVG, multi-size ICO, PNG fallbacks, Apple touch icon, ordinary and maskable PWA icons, manifest and HTML) in one ZIP.&lt;/p&gt;

&lt;p&gt;If you are stuck on a favicon that will not update, you can &lt;a href="https://favicon.now" rel="noopener noreferrer"&gt;check your live site on favicon.now&lt;/a&gt; for free without an account. Then work down this list until the tab, the search result and the home screen all agree.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>seo</category>
      <category>debugging</category>
    </item>
    <item>
      <title>The favicon and PWA icon sizes you actually need in 2026</title>
      <dc:creator>favicon.now</dc:creator>
      <pubDate>Tue, 10 Nov 2026 10:23:42 +0000</pubDate>
      <link>https://dev.to/faviconnow/the-favicon-and-pwa-icon-sizes-you-actually-need-in-2026-584k</link>
      <guid>https://dev.to/faviconnow/the-favicon-and-pwa-icon-sizes-you-actually-need-in-2026-584k</guid>
      <description>&lt;p&gt;If you have shipped more than a handful of sites, you have probably dropped a single &lt;code&gt;favicon.ico&lt;/code&gt; in the root and moved on. That used to be almost enough. In 2026 it is not.&lt;/p&gt;

&lt;p&gt;Browser tabs, search results, iOS home-screen shortcuts, and Android install surfaces all want different files, sizes, and compositions. Missing one of them rarely breaks the page. It just means a blurry tab icon, a cropped launcher mark, or a generic globe where your brand should be.&lt;/p&gt;

&lt;p&gt;I built favicon.now because I was tired of assembling that package by hand, and I am the site's maker, so I will be explicit about that. Here is the checklist: the files that matter, the HTML and manifest, and the mistakes I still see.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical set in 2026
&lt;/h2&gt;

&lt;p&gt;You do not need twenty icon sizes — just a small set that covers tabs, search, Apple shortcuts, and installable web apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;favicon.svg&lt;/code&gt;.&lt;/strong&gt; The modern tab icon. A self-contained SVG stays sharp at any density and can adapt to light and dark chrome when the artwork is designed for it. Pair it with a raster fallback; not every older client will use the SVG.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;favicon.ico&lt;/code&gt;.&lt;/strong&gt; Still the compatibility file. Browsers and some legacy clients look for it at the site root even when you forget a &lt;code&gt;&amp;lt;link&amp;gt;&lt;/code&gt; tag. A real ICO is a container with multiple frames, not a renamed PNG. At minimum, include solid 16×16 and 32×32 coverage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;favicon-48x48.png&lt;/code&gt;.&lt;/strong&gt; An explicit square PNG for browser and search contexts. Search engines that display a favicon generally want a square image whose size is a multiple of 48 pixels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;apple-touch-icon.png&lt;/code&gt; (180×180).&lt;/strong&gt; The icon iOS uses when someone adds your site to the home screen. Keep it square, give it an opaque background that suits the mark, and do not bake rounded corners into the image.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;icon-192x192.png&lt;/code&gt; and &lt;code&gt;icon-512x512.png&lt;/code&gt;.&lt;/strong&gt; The baseline PWA icons. 192 is the compact Android and installed-app size; 512 is the large source for install UI and splash surfaces. These are ordinary any-purpose icons, so they can keep transparent edges if that is how the mark is designed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;maskable-icon-192x192.png&lt;/code&gt; and &lt;code&gt;maskable-icon-512x512.png&lt;/code&gt;.&lt;/strong&gt; Separate files for adaptive Android shapes. A maskable icon lets the OS crop it into a circle, rounded square, or squircle. Keep essential artwork inside a central safe zone and fill the canvas with a full-bleed background. Relabeling a transparent tab icon as &lt;code&gt;purpose: maskable&lt;/code&gt; does not change the pixels, and the crop will look wrong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;site.webmanifest&lt;/code&gt;.&lt;/strong&gt; JSON that declares the app name, colors, icon paths, sizes, and purposes. Relative icon paths resolve against the manifest URL, not the page URL.&lt;/p&gt;

&lt;p&gt;Extra PNGs at 16, 32, and 96 pixels are useful fallbacks, but optional once this set is in place.&lt;/p&gt;

&lt;h2&gt;
  
  
  The HTML to put in your document head
&lt;/h2&gt;

&lt;p&gt;Upload the files to a stable public directory, usually the site root, then add these tags to the shared layout. Root-relative paths keep nested pages consistent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/favicon.svg"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"image/svg+xml"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"any"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/favicon-48x48.png"&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"image/png"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"48x48"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/favicon.ico"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"any"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-icon"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/apple-touch-icon.png"&lt;/span&gt; &lt;span class="na"&gt;sizes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"180x180"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"manifest"&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"/site.webmanifest"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Put the SVG first for browsers that can use it, then the PNG and ICO as fallbacks. The Apple touch icon uses its own &lt;code&gt;rel&lt;/code&gt;. The manifest is how install surfaces discover the 192 and 512 assets.&lt;/p&gt;

&lt;h2&gt;
  
  
  A manifest snippet that tells the truth about purposes
&lt;/h2&gt;

&lt;p&gt;A minimal, honest &lt;code&gt;site.webmanifest&lt;/code&gt; looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"My Website"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;"short_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"My Website"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;"start_url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;"scope"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;"display"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"standalone"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;"background_color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"#ffffff"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;"theme_color"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"#0f172a"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/icon-192x192.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"192x192"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"any"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/icon-512x512.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"512x512"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"any"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/maskable-icon-192x192.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"192x192"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"maskable"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"/maskable-icon-512x512.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"512x512"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"maskable"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Replace the name and colors with your own. Use &lt;code&gt;standalone&lt;/code&gt; only if the site is designed as an installed app; &lt;code&gt;browser&lt;/code&gt; or &lt;code&gt;minimal-ui&lt;/code&gt; is safer for a content site. A valid manifest does not make a site installable by itself. HTTPS, a service worker in some browsers, and each browser's own heuristics still apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common mistakes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Judging the mark only on a large canvas.&lt;/strong&gt; A logo that looks perfect at 512 pixels can collapse into a smudge at 16. One or two letters, a simple silhouette, and open padding survive; a full wordmark usually does not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Renaming a PNG to &lt;code&gt;favicon.ico&lt;/code&gt;.&lt;/strong&gt; That does not produce an ICO. The container and its frames have to be written as ICO.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skipping a square crop, or baking iOS rounded corners into the Apple touch icon.&lt;/strong&gt; Tabs and home screens are square. If the important part of the mark is off-center or tight against the edge, it will get clipped. Leave corner rounding to the device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Declaring a transparent icon as maskable.&lt;/strong&gt; Adaptive launchers will crop the corners and expose whatever sits behind the icon, often as a letterboxed mess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forgetting light and dark browser chrome.&lt;/strong&gt; A white mark on a transparent background disappears on a light tab bar; a black mark disappears on a dark one. If you use transparency, check both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pointing the manifest at the wrong path.&lt;/strong&gt; Relative &lt;code&gt;src&lt;/code&gt; values resolve from the manifest's URL. If &lt;code&gt;site.webmanifest&lt;/code&gt; lives in &lt;code&gt;/assets/&lt;/code&gt;, &lt;code&gt;icon-192x192.png&lt;/code&gt; is requested from &lt;code&gt;/assets/icon-192x192.png&lt;/code&gt; unless you use a root-relative path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treating the favicon as an SEO ranking lever.&lt;/strong&gt; It is not a direct ranking factor. A valid, recognizable icon can improve how your result is presented when a search engine chooses to show it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checking only the template source.&lt;/strong&gt; Confirm the rendered document head, then open each icon URL and the manifest directly. Look for HTTP 200, the right format, and the declared dimensions — caches can keep serving an old ICO after you replace the file.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I generate the package
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://favicon.now" rel="noopener noreferrer"&gt;favicon.now&lt;/a&gt; is a free generator I built to produce that same documented set from one source. You can start from an image (PNG, JPG, SVG, WebP, BMP, or GIF), an SVG you want to keep as a vector, one or two letters, or an emoji.&lt;/p&gt;

&lt;p&gt;The editor runs in your browser. You adjust spacing, colors, and shape, and you can inspect the mark at 16, 32, 48, 180, 192, and 512 pixels, plus mockups of tabs, search results, and phone home screens. A maskable preview shows the safe zone so letters and symbols stay inside the inner guide.&lt;/p&gt;

&lt;p&gt;The download is one ZIP. The standard package is 14 documented files: &lt;code&gt;favicon.svg&lt;/code&gt;, a six-frame &lt;code&gt;favicon.ico&lt;/code&gt; (sizes from 16 through 256 pixels), browser PNGs at 16, 32, 48, and 96, the 180×180 Apple touch icon, ordinary and maskable 192 and 512 PWA icons, plus &lt;code&gt;site.webmanifest&lt;/code&gt; and the HTML to paste into your layout.&lt;/p&gt;

&lt;p&gt;Editing and previews stay in the browser. A ZIP request sends the final square image — and a sanitized SVG when you supplied one — to an in-memory packaging endpoint. That request is not intentionally stored. A project is saved only if you sign in and choose to keep it on a profile.&lt;/p&gt;

&lt;p&gt;Ship the right sizes once, wire them up correctly, and you can stop thinking about it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>pwa</category>
      <category>html</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
