Favicon Not Showing After Clearing Cache? The Real Fix
You cleared your browser cache, hit refresh, and your favicon is still a blank white square. If you are dealing with a favicon not showing after clearing cache, you are likely blaming the browser when the actual culprit is your server.
I spent three hours last Tuesday fighting this exact issue on a client's staging site. I wiped Chrome's favicon database, restarted the machine, and still got nothing. The problem wasn't the browser cache at all.
Here is the fastest way to fix this, followed by the root causes you need to check so it never happens again.
The Quick Fix: Bypass the Browser Cache Entirely
If the browser refuses to fetch your new icon, you need to force a unique request. You do this by appending a query string to your favicon path. This tricks the browser into thinking it is downloading a brand new file.
Update your HTML <link> tag to include a version parameter:
Change that version number every time you update your icon. This is the single most reliable way to force a refresh without asking users to wipe their browsing data. For a deeper look at long-term strategies, check our guide on favicon cache busting best practices.
Why Clearing Cache Does Not Always Work
Browsers are stubborn creatures. When you clear your cache, you are only wiping the HTTP cache. Favicons often live in a completely separate, persistent database that standard cache clearing ignores.
The Secret SQLite Favicon Database
Chrome and Firefox maintain a dedicated SQLite database for favicons. This database survives standard cache clears because it is tied to your browser history and bookmarks. If the browser thinks the favicon URL has not changed, it will not attempt a new fetch.
This is why your icon stubbornly refuses to update even after you nuke your browsing data. The browser looks at the hardcoded URL, checks the SQLite DB, finds a match, and serves the stale file.
Service Worker Interception
If you are building a Progressive Web App, your service worker might be serving the old favicon directly from the Cache API. Clearing the browser cache does not touch the service worker cache.
To fix this, you must unregister the service worker in your DevTools (Application > Service Workers > Unregister) or update your service worker file to delete the old cached favicon entry.
Root Causes: What to Check on Your Server
If the query string trick does not work, your server is actively blocking or misrouting the request. Here are the three server-side issues I see most often.
1. Aggressive CDN Edge Caching
Your CDN might be serving a stale version of the file to users globally. Cloudflare and Vercel often cache static assets like favicon.ico for months by default.
You need to log into your CDN dashboard and manually purge the cache for your favicon file. Alternatively, set a shorter Time to Live (TTL) for your icon files.
2. Missing MIME Type Declarations
If your server does not tell the browser what type of file it is serving, modern browsers will reject it. I have seen Nginx and Apache setups that serve .ico files as application/octet-stream, which Chrome silently ignores.
Ensure your Nginx config includes the correct MIME type:
types {
image/x-icon ico;
image/svg+xml svg;
}
3. Strict CORS Policies
If you are hosting your favicon on a subdomain or a dedicated static asset bucket, Cross-Origin Resource Sharing (CORS) policies might be blocking it. Browsers will not render a favicon if the response lacks the proper Access-Control-Allow-Origin header.
GitHub does this perfectly. They host their SVG favicon on a separate CDN domain but ensure the CORS headers allow their main domain to fetch it. If you want to see how a major brand handles this, inspect the network request for GitHub's tab icon. They use precise headers to ensure the icon loads instantly without security warnings.
How to Prevent This Headache in 2026
Stop relying on manual cache clearing. It is a losing battle. You need a deployment strategy that makes stale favicons impossible.
Always version your files: Rename your file to favicon-20260115.ico or use the query string trick shown above.
Update your web manifest: If you use a manifest.json, change the icon path version there too. Browsers read the manifest independently of your HTML.
Purge your CDN on deploy: Add a step to your CI/CD pipeline that automatically purges the favicon cache after a successful build.
You should also verify your setup before pushing to production. Use a tool like Mzu favicondl to confirm your server is returning the correct headers and file types.
Stop Guessing and Start Verifying
Dealing with a favicon not showing after clearing cache is frustrating because you assume the browser is broken. Usually, the browser is just following outdated instructions from your server or its own hidden SQLite database.
Append a query string to force the download, check your service worker, and verify your CDN and MIME types. For more general troubleshooting on missing icons, read our broader favicon not showing guide.
If you want to verify your icon setup across all platforms without the guesswork, run your URL through Mzu favicondl. We will show you exactly what your users see.
Has borrado la caché del navegador, has pulsado F5 como un loco, y tu favicon sigue siendo un cuadro blanco en blanco. Si te estás pegando con un favicon que no carga después de limpiar la caché, seguramente estés maldiciendo al navegador cuando el verdadero culpable está en tu servidor.
El otro martes me tiré tres horas peleando con esto mismo en un entorno de staging de un cliente. Llegué a borrar la base de datos de favicons de Chrome a mano, reinicié el equipo, y nada de nada. El problema no era la caché del navegador, para nada.
Te cuento la solución más rápida que existe, y después revisamos las causas raíz que tienes que comprobar para que no te vuelva a pasar.
El Fix Rápido: Ignora la Caché del Navegador
Si el navegador se niega en rotundo a descargar tu nuevo icono, tienes que forzar una petición única. Se hace añadiendo un query string a la ruta de tu favicon. Con esto el navegador piensa que es un archivo totalmente nuevo y lo pide desde cero.
Actualiza tu etiqueta <link> del HTML para incluir un parámetro de versión:
Cambia ese número de versión cada vez que actualices el icono. Es el método más fiable para forzar un refresh sin tener que pedir a tus usuarios que borren sus datos de navegación. Para ver estrategias a largo plazo, échale un ojo a nuestra guía sobre favicon cache busting best practices.
Por Qué Borrar la Caché No Siempre Funciona
Los navegadores son tozudos. Cuando limpias la caché, solo estás borrando la caché HTTP. Los favicons a menudo viven en una base de datos separada y persistente que el borrado de caché estándar se salta por completo.
La Base de Datos SQLite de Favicons
Chrome y Firefox mantienen una base de datos SQLite dedicada exclusivamente a favicons. Esta base de datos sobrevive a los borrados de caché normales porque está ligada al historial de navegación y a los marcadores. Si el navegador cree que la URL del favicon no ha cambiado, ni se molesta en hacer una nueva petición.
Por eso tu icono se resiste a actualizarse incluso cuando vaporizas todos tus datos de navegación. El navegador mira la URL hardcoded, consulta la base de datos SQLite, encuentra una coincidencia y te sirve el archivo antiguo.
Intercepción del Service Worker
Si estás montando una PWA, tu service worker puede estar sirviendo el favicon viejo directamente desde la Cache API. Borrar la caché del navegador no afecta para nada a la caché del service worker.
Para solucionarlo, tienes que unregister el service worker en tus DevTools (Application > Service Workers > Unregister) o actualizar el archivo del service worker para que borre la entrada del favicon cacheado.
Causas Raíz: Qué Revisar en tu Servidor
Si el truco del query string no funciona, tu servidor está bloqueando o enrutando mal la petición. Aquí te dejo los tres problemas server-side que me encuentro más a menudo.
1. Edge Caching Agresivo del CDN
Tu CDN puede estar sirviendo una versión obsoleta del archivo a usuarios de todo el mundo. Cloudflare y Vercel suelen cachear archivos estáticos como favicon.ico durante meses por defecto.
Tienes que entrar en el panel de tu CDN y hacer un purge manual de la caché para tu favicon. Otra opción es configurar un Time to Live (TTL) más corto para tus archivos de iconos.
2. Declaraciones MIME Type Ausentes
Si tu servidor no le dice al navegador qué tipo de archivo está sirviendo, los navegadores modernos lo van a rechazar. He visto configuraciones de Nginx y Apache que sirven archivos .ico como application/octet-stream, algo que Chrome ignora sin decir ni pío.
Asegúrate de que tu configuración de Nginx incluye el MIME type correcto:
types {
image/x-icon ico;
image/svg+xml svg;
}
3. Políticas CORS Estrictas
Si tienes tu favicon alojado en un subdominio o en un bucket de archivos estáticos dedicado, las políticas de Cross-Origin Resource Sharing (CORS) pueden estar bloqueándolo. Los navegadores no van a renderizar un favicon si la respuesta no incluye el header adecuado de Access-Control-Allow-Origin.
GitHub hace esto de maravilla. Tienen su favicon SVG en un dominio CDN separado pero configuran los headers CORS para que su dominio principal pueda fetchearlo. Si quieres ver cómo lo gestiona una marca grande, inspecciona la petición de red del icono de pestaña de GitHub. Usan headers precisos para que el icono cargue al instante y sin avisos de seguridad.
Cómo Prevenir Este Dolor de Cabeza en 2026
Deja de depender de borrar la caché a mano. Es una batalla perdida. Necesitas una estrategia de despliegue que haga imposible que se queden favicons obsoletos.
Versiona siempre tus archivos: Renombra tu archivo a favicon-20260115.ico o usa el truco del query string que te he mostrado arriba.
Actualiza tu web manifest: Si usas un manifest.json, cambia también la versión de la ruta del icono ahí. Los navegadores leen el manifest de forma independiente a tu HTML.
Purga tu CDN en cada deploy: Añade un paso a tu pipeline de CI/CD que haga un purge automático de la caché del favicon después de un build correcto.
También deberías verificar tu configuración antes de subir a producción. Usa una herramienta como Mzu favicondl para confirmar que tu servidor está devolviendo los headers y tipos de archivo correctos.
Deja de Suponer y Empieza a Verificar
Lidiar con un favicon que no carga después de limpiar la caché es frustrante porque asumes que el navegador está roto. Normalmente, el navegador solo está siguiendo instrucciones desactualizadas de tu servidor o de su propia base de datos SQLite oculta.
Añade un query string para forzar la descarga, revisa tu service worker y verifica tu CDN y los MIME types. Para más troubleshooting general sobre iconos que no aparecen, lee nuestra guía más amplia sobre favicon not showing.
Si quieres verificar tu configuración de iconos en todas las plataformas sin ir a ciegas, pasa tu URL por Mzu favicondl. Te mostramos exactamente lo que ven tus usuarios.
브라우저 캐시를 지우고 새로고침을 눌렀는데도 favicon이 여전히 하얀 빈 칸으로 보인다면, 브라우저 탓을 하기 전에 서버 쪽을 의심해봐야 합니다. 캐시를 삭제해도 favicon이 갱신되지 않는 문제는 생각보다 흔한 케이스입니다.
지난주에 모 서비스의 스테이징 환경에서 이 문제 때문에 세 시간을 날렸습니다. Chrome의 favicon 데이터베이스를 직접 삭제하고, 브라우저 재시작도 해봤지만 아무 변화가 없었습니다. 원인은 브라우저 캐시가 아니었습니다.
이 글에서는 가장 빠르게 해결할 수 있는 방법과, 앞으로 같은 문제가 재발하지 않도록 체크해야 할 근본적인 원인들을 정리해보겠습니다.
가장 빠른 해결책: 브라우저 캐시 우회하기
브라우저가 새 favicon을 가져오지 않는다면, 강제로 새로운 요청을 보내도록 만들어야 합니다. favicon 경로에 query string을 추가하면 됩니다. 브라우저는 이를 완전히 새로운 파일로 인식해서 다시 다운로드합니다.
favicon을 교체할 때마다 이 version 숫자를 바꿔주면 됩니다. 사용자에게 캐시 삭제를 요청하지 않고도 강제 갱신할 수 있는 가장 확실한 방법입니다. 장기적인 관리 전략이 궁금하다면 favicon cache busting best practices 가이드를 참고해보세요.
캐시 삭제가 통하지 않는 이유
브라우저는 생각보다 고집이 섭니다. 일반적으로 캐시를 삭제할 때 지워지는 것은 HTTP cache뿐입니다. favicon은 표준 캐시 삭제로는 닿지 않는 별도의 영구적인 데이터베이스에 저장되는 경우가 많습니다.
숨겨진 SQLite Favicon Database
Chrome과 Firefox는 favicon 전용 SQLite database를 따로 관리합니다. 이 데이터베이스는 브라우저 history 및 bookmark와 연결되어 있어서, 일반적인 캐시 삭제로는 지워지지 않습니다. 브라우저가 favicon URL이 바뀌지 않았다고 판단하면 새로 fetch를 시도하지 않습니다.
이것이 브라우저 데이터를 싹 다 지웠는데도 favicon이 옛날 것으로 굳어있는 이유입니다. 브라우저는 하드코딩된 URL을 보고 SQLite DB를 확인한 뒤, 매칭되는 항목을 찾아 낡은 파일을 그대로 보여줍니다.
Service Worker Interception
PWA를 개발 중이라면, service worker가 Cache API에서 옛날 favicon을 직접 내려주고 있을 수 있습니다. 브라우저 캐시를 삭제해도 service worker cache에는 아무 영향이 없습니다.
이 경우 DevTools에서 service worker를 직접 unregister 해야 합니다. (Application > Service Workers > Unregister) 또는 service worker 파일을 수정해서 기존에 캐싱된 favicon entry를 삭제하도록 업데이트해야 합니다.
근본 원인: 서버에서 점검할 것들
query string 트릭을 써도 해결되지 않는다면, 서버가 요청을 차단하거나 잘못 라우팅하고 있는 상황입니다. 실무에서 가장 자주 마주치는 서버 측 문제 세 가지를 소개합니다.
1. 과도한 CDN Edge Caching
CDN에서 오래된 파일을 글로벌 사용자에게 계속 내려주고 있을 수 있습니다. Cloudflare나 Vercel 같은 CDN은 favicon.ico 같은 정적 자원을 기본적으로 몇 달 단위로 캐싱합니다.
CDN 대시보드에 접속해서 favicon 파일의 캐시를 수동으로 purge 해야 합니다. 또는 icon 파일에 대해 더 짧은 TTL을 설정하는 것도 방법입니다.
2. MIME Type 선언 누락
서버가 파일의 종류를 브라우저에게 알려주지 않으면, 최신 브라우저는 해당 파일을 거부합니다. Nginx나 Apache 환경에서 .ico 파일이 application/octet-stream으로 서빙되는 경우가 있는데, Chrome은 이를 조용히 무시해버립니다.
Nginx 설정에 올바른 MIME type이 포함되어 있는지 확인하세요.
types {
image/x-icon ico;
image/svg+xml svg;
}
3. 엄격한 CORS 정책
favicon을 서브도메인이나 별도의 정적 자원 버킷에 호스팅하는 경우, CORS 정책이 이를 차단할 수 있습니다. response에 적절한 Access-Control-Allow-Origin header가 없으면 브라우저는 favicon을 렌더링하지 않습니다.
GitHub가 이 부분을 모범적으로 처리하고 있습니다. SVG favicon을 별도의 CDN 도메인에 호스팅하면서도, CORS header를 통해 메인 도메인이 이를 fetch 할 수 있도록 허용해두었습니다. 대형 서비스가 이 문제를 어떻게 다루는지 확인하고 싶다면, GitHub의 tab icon에 대한 network request를 직접 inspect 해보세요. 정교한 header 설정으로 icon이 보안 경고 없이 즉시 로드되도록 보장하고 있습니다.
2026년에는 이런 삽질을 예방하자
수동으로 캐시를 지우는 방식에 의존하는 건 그만두세요. 이건 끝없는 싸움입니다. 낡은 favicon이 서빙될 가능성 자체를 원천 차단하는 배포 전략이 필요합니다.
항상 파일에 version을 붙이세요: 파일명을 favicon-20260115.ico로 바꾸거나, 앞서 보여드린 query string 방식을 사용하세요.
web manifest도 함께 업데이트하세요:manifest.json을 사용 중이라면, 거기 있는 icon path의 version도 함께 변경해야 합니다. 브라우저는 HTML과 별개로 manifest를 독립적으로 읽습니다.
배포 시 CDN 캐시를 purge 하세요: CI/CD pipeline에 빌드 성공 후 favicon 캐시를 자동으로 purge 하는 단계를 추가하세요.
배포 전에 설정이 제대로 되었는지 검증하는 것도 잊지 마세요. Mzu favicondl 같은 도구를 사용하면 서버가 올바른 header와 file type을 반환하는지 쉽게 확인할 수 있습니다.
추측은 멈추고 검증하자
캐시를 삭제해도 favicon이 보이지 않는 문제는 브라우저가 고장 났다는 착각 때문에 더욱 답답하게 느껴집니다. 하지만 대부분의 경우, 브라우저는 서버나 자체 SQLite database의 오래된 지시사항을 충실하게 따라가고 있을 뿐입니다.
query string을 추가해 강제 다운로드를 유도하고, service worker를 점검하고, CDN과 MIME type을 확인해보세요. icon 누락 문제에 대한 더 폭넓은 트러블슈팅이 필요하다면 favicon not showing 가이드를 읽어보시길 권합니다.
여러 플랫폼에서 icon 설정이 제대로 되었는지 추측 없이 확인하고 싶다면, 여러분의 URL을 Mzu favicondl에 입력해보세요. 사용자가 실제로 보는 화면을 정확하게 보여드립니다.
faviconを更新するたびに、このバージョン番号を変更してください。ユーザーにキャッシュクリアを促すことなく、確実にfaviconを更新できる最もシンプルで確実な方法です。長期的な運用戦略について詳しく知りたい方は、favicon cache busting best practicesのガイドを参考にしてみてください。