Solución asesina en 2020
Esta solución necesariamente llega nueve años después de la pregunta original, porque hasta hace relativamente poco tiempo, la mayoría de los navegadores no podían manejar los favicons en .svg
formato.
Ese ya no es el caso.
Ver: https://caniuse.com/#feat=link-icon-svg
1) Elija SVG como formato Favicon
En este momento, en junio de 2020, estos navegadores pueden manejar Favicons SVG :
- Cromo
- Firefox
- Borde
- Ópera
- Chrome para Android
- Navegador KaiOS
Tenga en cuenta que estos navegadores aún no pueden:
- Safari
- Safari de iOS
- Firefox para Android
Con lo anterior en mente, podemos usar con confianza un Favicon SVG .
2) Presente el SVG como un URI de datos
El objetivo principal aquí es evitar las solicitudes HTTP.
Como han mencionado otras soluciones, una forma bastante inteligente de hacer esto es usar un URI de datos en lugar de una URL HTTP .
Los SVG (especialmente los SVG pequeños) se prestan perfectamente a los URI de datos, porque este último es simplemente texto sin formato (con cualquier carácter potencialmente ambiguo codificado en porcentaje) y el primero, que es XML, se puede escribir como una larga línea de texto sin formato (con un poco de códigos porcentuales) increíblemente sencillo.
3) Todo SVG es un Emoji
En diciembre de 2019, Leandro Linares fue uno de los primeros en darse cuenta de que, dado que Chrome se había unido a Firefox para apoyar los SVG Favicons, valió la pena experimentar para ver si un favicon podría crearse a partir de un emoji:
https://lean8086.com/articles/using-an-emoji-as-favicon-with-svg/
La corazonada de Linares era correcta.
Varios meses después (marzo de 2020), Code Pirate Lea Verou se dio cuenta de lo mismo:
https://twitter.com/leaverou/status/1241619866475474946
Y los favicons nunca volvieron a ser lo mismo.
4) Implementando la solución usted mismo:
Aquí hay un SVG simple:
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
viewBox="0 0 16 16">
<text x="0" y="14">🦄</text>
</svg>
Y aquí está el mismo SVG que un URI de datos :
data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E
Y, finalmente, aquí está ese URI de datos como un Favicon:
<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />
5) Más trucos
Como el Favicon es un SVG, se le puede aplicar cualquier cantidad de efectos de filtro (tanto SVG como CSS).
Por ejemplo, junto con el Favicon de unicornio blanco anterior, podemos hacer fácilmente un Favicon de unicornio negro aplicando el filtro:
style="filter: invert(100%);"
Favicon de unicornio negro:
<link rel="icon" href="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20xmlns:xlink='http://www.w3.org/1999/xlink'%20viewBox='0%200%2016%2016'%3E%3Ctext%20x='0'%20y='14'%20style='filter:%20invert(100%);'%3E🦄%3C/text%3E%3C/svg%3E" type="image/svg+xml" />