Adaptive Favicons für Hell- und Dunkelmodus erstellen: Vollständige Entwickler-Anleitung
Moderne Websites müssen sich an Benutzerpräferenzen anpassen, und Favicon-Theming ist ein oft übersehenes Detail, das die Benutzererfahrung erheblich verbessern kann. Wenn Benutzer zwischen Hell- und Dunkelmodus wechseln, sollte sich Ihr Favicon entsprechend anpassen, um visuelle Konsistenz zu wahren.
Diese umfassende Anleitung behandelt alles von einfachen HTML-Lösungen bis zu fortgeschrittenen JavaScript-Implementierungen in populären Frameworks. Ob Sie eine statische Website oder eine komplexe Webanwendung entwickeln – Sie finden den richtigen Ansatz für Ihr Projekt.
Methode 1: Reine HTML-Lösung (Empfohlen für die meisten Websites)
Der reine HTML-Ansatz ist die zuverlässigste Methode und benötigt kein JavaScript. Er nutzt CSS-Media-Queries innerhalb des media-Attributs von Favicon-Link-Tags, um Favicons automatisch basierend auf der Systempräferenz des Benutzers zu wechseln.
Warum diese Methode am besten funktioniert:
- Kein JavaScript erforderlich
- Funktioniert sofort beim Seitenladen
- Von allen modernen Browsern unterstützt
- Kein Performance-Overhead
Grundlegende Implementierung
<head>
<!-- Standard-Favicon (Fallback für nicht unterstützte Browser) -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon">
<!-- Hellmodus-Favicon -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon" media="(prefers-color-scheme: light)">
<!-- Dunkelmodus-Favicon -->
<link rel="icon" href="/favicon-dark.ico" type="image/x-icon" media="(prefers-color-scheme: dark)">
</head>
Vollständige Multi-Größen-Implementierung
Für umfassende Geräteunterstützung implementieren Sie mehrere Größen mit Theme-Varianten:
<head>
<!-- Standard-Favicons (Fallback) -->
<link rel="icon" type="image/x-icon" href="/favicon-light.ico">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-light-32x32.png">
<!-- Hellmodus-Favicons -->
<link rel="icon" type="image/x-icon" href="/favicon-light.ico" media="(prefers-color-scheme: light)">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-light-16x16.png" media="(prefers-color-scheme: light)">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-light-32x32.png" media="(prefers-color-scheme: light)">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-light.png" media="(prefers-color-scheme: light)">
<!-- Dunkelmodus-Favicons -->
<link rel="icon" type="image/x-icon" href="/favicon-dark.ico" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-dark-16x16.png" media="(prefers-color-scheme: dark)">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-dark-32x32.png" media="(prefers-color-scheme: dark)">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon-dark.png" media="(prefers-color-scheme: dark)">
<!-- SVG-Favicons mit eingebettetem CSS -->
<link rel="icon" type="image/svg+xml" href="/favicon-adaptive.svg">
</head>
Adaptives SVG-Favicon
Erstellen Sie ein einzelnes SVG-Favicon, das sich automatisch an das Farbschema anpasst:
<!-- favicon-adaptive.svg -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<style>
.light-mode { fill: #000000; }
.dark-mode { fill: #ffffff; }
@media (prefers-color-scheme: dark) {
.light-mode { display: none; }
}
@media (prefers-color-scheme: light) {
.dark-mode { display: none; }
}
</style>
<!-- Hellmodus-Design -->
<circle class="light-mode" cx="16" cy="16" r="12"/>
<text class="light-mode" x="16" y="20" text-anchor="middle" fill="#fff" font-size="14">L</text>
<!-- Dunkelmodus-Design -->
<circle class="dark-mode" cx="16" cy="16" r="12"/>
<text class="dark-mode" x="16" y="20" text-anchor="middle" fill="#000" font-size="14">D</text>
</svg>
Methode 2: JavaScript-Implementierung
Wenn Sie dynamischen Favicon-Wechsel über Systempräferenzen hinaus benötigen – beispielsweise benutzerdefinierte Theme-Umschalter oder Echtzeit-Updates – bietet JavaScript die nötige Flexibilität.
JavaScript verwenden, wenn:
- Sie benutzerdefinierte Theme-Steuerungen haben
- Sie mit dem Theme-Status Ihrer App synchronisieren müssen
- Sie Favicons ohne Seitenaktualisierung aktualisieren möchten
- Sie eine Single-Page-Application entwickeln
Grundlegender JavaScript-Ansatz
// Funktion zum Aktualisieren des Favicons basierend auf dem Theme
function updateFavicon(theme) {
const favicon = document.querySelector('link[rel="icon"]') ||
document.createElement('link');
favicon.rel = 'icon';
favicon.type = 'image/png';
favicon.href = theme === 'dark' ? '/favicon-dark.png' : '/favicon-light.png';
if (!document.querySelector('link[rel="icon"]')) {
document.head.appendChild(favicon);
}
}
// Auf System-Theme-Änderungen lauschen
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
// Initiales Favicon setzen
updateFavicon(mediaQuery.matches ? 'dark' : 'light');
// Auf Änderungen lauschen
mediaQuery.addEventListener('change', (e) => {
updateFavicon(e.matches ? 'dark' : 'light');
});
}
Fortgeschrittenes JavaScript mit mehreren Größen
class FaviconManager {
constructor() {
this.sizes = [
{ size: '16x16', selector: 'link[rel="icon"][sizes="16x16"]' },
{ size: '32x32', selector: 'link[rel="icon"][sizes="32x32"]' },
{ size: '180x180', selector: 'link[rel="apple-touch-icon"]' }
];
this.init();
}
init() {
// Initiales Theme setzen
this.updateTheme(this.getSystemTheme());
// Auf Systemänderungen lauschen
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
mediaQuery.addEventListener('change', (e) => {
this.updateTheme(e.matches ? 'dark' : 'light');
});
}
}
getSystemTheme() {
return window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
? 'dark' : 'light';
}
updateTheme(theme) {
this.sizes.forEach(({ size, selector }) => {
let link = document.querySelector(selector);
if (!link) {
link = document.createElement('link');
link.rel = size === '180x180' ? 'apple-touch-icon' : 'icon';
link.type = 'image/png';
if (size !== '180x180') link.sizes = size;
document.head.appendChild(link);
}
link.href = `/favicon-${theme}-${size}.png`;
});
// Standard-ICO-Datei aktualisieren
let icoLink = document.querySelector('link[rel="icon"][type="image/x-icon"]');
if (!icoLink) {
icoLink = document.createElement('link');
icoLink.rel = 'icon';
icoLink.type = 'image/x-icon';
document.head.appendChild(icoLink);
}
icoLink.href = `/favicon-${theme}.ico`;
}
// Methode zum manuellen Setzen des Themes (für benutzerdefinierte Theme-Umschalter)
setTheme(theme) {
this.updateTheme(theme);
}
}
// Initialisieren
const faviconManager = new FaviconManager();
// Export für manuellen Theme-Wechsel
window.faviconManager = faviconManager;
Methode 3: Framework-Integration
Moderne Frameworks bieten elegante Möglichkeiten, Favicon-Theming zu handhaben. So implementieren Sie adaptive Favicons in den populärsten JavaScript-Frameworks.
React-Implementierung
import { useEffect, useState } from 'react';
import { Helmet } from 'react-helmet';
function AdaptiveFavicon() {
const [theme, setTheme] = useState('light');
useEffect(() => {
// Systempräferenz prüfen
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
setTheme(mediaQuery.matches ? 'dark' : 'light');
// Auf Änderungen lauschen
const handleChange = (e) => {
setTheme(e.matches ? 'dark' : 'light');
};
mediaQuery.addEventListener('change', handleChange);
return () => mediaQuery.removeEventListener('change', handleChange);
}, []);
return (
<Helmet>
<link rel="icon" type="image/x-icon" href={`/favicon-${theme}.ico`} />
<link rel="icon" type="image/png" sizes="32x32" href={`/favicon-${theme}-32x32.png`} />
<link rel="apple-touch-icon" sizes="180x180" href={`/apple-touch-icon-${theme}.png`} />
</Helmet>
);
}
Vue 3-Implementierung
<template>
<div>
<!-- Ihr App-Inhalt -->
</div>
</template>
<script setup>
import { ref, onMounted, watch } from 'vue'
import { useHead } from '@unhead/vue'
const isDark = ref(false)
const updateFavicon = () => {
const theme = isDark.value ? 'dark' : 'light'
useHead({
link: [
{ rel: 'icon', type: 'image/x-icon', href: `/favicon-${theme}.ico` },
{ rel: 'icon', type: 'image/png', sizes: '32x32', href: `/favicon-${theme}-32x32.png` },
{ rel: 'apple-touch-icon', sizes: '180x180', href: `/apple-touch-icon-${theme}.png` }
]
})
}
onMounted(() => {
// Systempräferenz prüfen
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
isDark.value = mediaQuery.matches
// Auf Änderungen lauschen
mediaQuery.addEventListener('change', (e) => {
isDark.value = e.matches
})
}
updateFavicon()
})
watch(isDark, updateFavicon)
</script>
Nuxt 3-Implementierung
// nuxt.config.ts
export default defineNuxtConfig({
app: {
head: {
script: [
{
innerHTML: `
(function() {
const updateFavicon = (isDark) => {
const theme = isDark ? 'dark' : 'light';
const links = [
{ rel: 'icon', type: 'image/x-icon', href: \`/favicon-\${theme}.ico\` },
{ rel: 'icon', type: 'image/png', sizes: '32x32', href: \`/favicon-\${theme}-32x32.png\` }
];
links.forEach(linkData => {
let link = document.querySelector(\`link[rel="\${linkData.rel}"][sizes="\${linkData.sizes || 'any'}"]\`);
if (!link) {
link = document.createElement('link');
Object.assign(link, linkData);
document.head.appendChild(link);
} else {
link.href = linkData.href;
}
});
};
if (window.matchMedia) {
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
updateFavicon(mediaQuery.matches);
mediaQuery.addEventListener('change', e => updateFavicon(e.matches));
}
})();
`
}
]
}
}
})
Methode 4: CSS-in-JS Favicon (Fortgeschritten)
Favicons dynamisch mit Canvas und CSS-Farben generieren:
class DynamicFaviconGenerator {
constructor() {
this.canvas = document.createElement('canvas');
this.ctx = this.canvas.getContext('2d');
this.canvas.width = 32;
this.canvas.height = 32;
}
generateFavicon(theme) {
const colors = {
light: { bg: '#ffffff', text: '#000000' },
dark: { bg: '#000000', text: '#ffffff' }
};
const { bg, text } = colors[theme];
// Canvas leeren
this.ctx.clearRect(0, 0, 32, 32);
// Hintergrund zeichnen
this.ctx.fillStyle = bg;
this.ctx.fillRect(0, 0, 32, 32);
// Rand zeichnen
this.ctx.strokeStyle = text;
this.ctx.lineWidth = 2;
this.ctx.strokeRect(2, 2, 28, 28);
// Icon zeichnen (Beispiel: Buchstabe oder Symbol)
this.ctx.fillStyle = text;
this.ctx.font = 'bold 20px Arial';
this.ctx.textAlign = 'center';
this.ctx.textBaseline = 'middle';
this.ctx.fillText('🌙', 16, 16);
return this.canvas.toDataURL('image/png');
}
updateFavicon(theme) {
const dataUrl = this.generateFavicon(theme);
let link = document.querySelector('link[rel="icon"]');
if (!link) {
link = document.createElement('link');
link.rel = 'icon';
link.type = 'image/png';
document.head.appendChild(link);
}
link.href = dataUrl;
}
}
// Verwendung
const generator = new DynamicFaviconGenerator();
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
generator.updateFavicon(mediaQuery.matches ? 'dark' : 'light');
mediaQuery.addEventListener('change', e => {
generator.updateFavicon(e.matches ? 'dark' : 'light');
});
Design-Best-Practices
Die Erstellung effektiver adaptiver Favicons erfordert sorgfältige Beachtung von Designprinzipien und Benutzererfahrung.
Farbkontrast und Sichtbarkeit
Hellmodus-Favicon-Design:
- Dunkle Elemente (Text, Icons) auf transparentem oder hellem Hintergrund verwenden
- WCAG AA-Kontrastverhältnisse anstreben (mindestens 4,5:1)
- Darstellung auf weißen Browser-Tabs und Lesezeichenleisten testen
- Klarheit bei 16x16 Pixeln sicherstellen (kleinste gängige Größe)
Dunkelmodus-Favicon-Design:
- Helle Elemente auf transparentem oder dunklem Hintergrund verwenden
- Sichtbarkeit gegen dunkle Browser-Themes testen
- Reines Weiß (#ffffff) vermeiden – Gebrochenes Weiß (#f0f0f0) ist ausgewogener
- Subtile Schatten oder Umrandungen für Definition erwägen
Tipps für Design-Konsistenz
- Markenbekanntheit beibehalten - Kern-Designelemente konsistent halten
- Bei mehreren Größen testen - 16x16, 32x32 und 180x180 Pixel
- Einfache Formen verwenden - Komplexe Details verschwinden bei kleinen Größen
- An farbenblinde Benutzer denken - Nicht ausschließlich auf Farbe zur Differenzierung setzen
Dateibenennung
Organisieren Sie Ihre Favicon-Dateien mit klarer Benennung:
/public/
├── favicon-light.ico
├── favicon-dark.ico
├── favicon-light-16x16.png
├── favicon-dark-16x16.png
├── favicon-light-32x32.png
├── favicon-dark-32x32.png
├── apple-touch-icon-light.png
├── apple-touch-icon-dark.png
└── favicon-adaptive.svg
Browserkompatibilität
Unterstützung adaptiver Favicons in modernen Browsern
| Browser | Media-Query-Unterstützung | Hinweise |
|---|---|---|
| Chrome 76+ | Volle Unterstützung | Funktioniert einwandfrei |
| Firefox 67+ | Volle Unterstützung | Hervorragende Implementierung |
| Safari 12.1+ | Volle Unterstützung | Einschließlich iOS Safari |
| Edge 79+ | Volle Unterstützung | Chromium-basierter Edge |
| Internet Explorer | Keine Unterstützung | JavaScript-Fallback verwenden |
Marktabdeckung: Diese Versionen decken ~95% der globalen Browsernutzung ab (Stand 2025).
Fallback-Strategie
<!-- Immer Fallbacks bereitstellen -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon">
<!-- Erweiterte Unterstützung für moderne Browser -->
<link rel="icon" href="/favicon-light.ico" type="image/x-icon" media="(prefers-color-scheme: light)">
<link rel="icon" href="/favicon-dark.ico" type="image/x-icon" media="(prefers-color-scheme: dark)">
<!-- JavaScript-Fallback für ältere Browser -->
<script>
if (!window.matchMedia || !CSS.supports('(prefers-color-scheme: dark)')) {
// Favicon basierend auf Tageszeit oder anderen Heuristiken laden
const hour = new Date().getHours();
const isDark = hour < 6 || hour > 18;
document.querySelector('link[rel="icon"]').href =
isDark ? '/favicon-dark.ico' : '/favicon-light.ico';
}
</script>
Tests und Validierung
Manuelle Test-Checkliste
- [ ] Im Hellmodus testen (Systempräferenz)
- [ ] Im Dunkelmodus testen (Systempräferenz)
- [ ] Sofortigen Favicon-Wechsel bei System-Theme-Umschaltung überprüfen
- [ ] Verschiedene Browser testen (Chrome, Firefox, Safari, Edge)
- [ ] Auf Mobilgeräten testen
- [ ] Fallback-Verhalten in älteren Browsern validieren
Automatisierte Tests
// Testskript für Favicon-Theme-Wechsel
function testFaviconThemes() {
const tests = [
{ theme: 'light', expected: '/favicon-light.ico' },
{ theme: 'dark', expected: '/favicon-dark.ico' }
];
tests.forEach(({ theme, expected }) => {
// Media Query mocken
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: jest.fn().mockImplementation(query => ({
matches: query.includes('dark') ? theme === 'dark' : theme === 'light',
addEventListener: jest.fn(),
removeEventListener: jest.fn(),
})),
});
// Update auslösen
updateFavicon(theme);
// Prüfen
const favicon = document.querySelector('link[rel="icon"]');
expect(favicon.href).toContain(expected);
});
}
Performance-Optimierung
Theme-Favicons vorladen
<!-- Beide Theme-Favicons für sofortigen Wechsel vorladen -->
<link rel="preload" as="image" href="/favicon-light.ico">
<link rel="preload" as="image" href="/favicon-dark.ico">
Dateigrößen minimieren
- ICO-Dateien unter 1KB halten
- PNG-Dateien mit Tools wie TinyPNG optimieren
- SVG für einfache geometrische Designs verwenden
- WebP-Format für moderne Browser erwägen
Caching-Strategie
# Nginx-Konfiguration für Favicon-Caching
location ~* \.(ico|png|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
Fehlerbehebung häufiger Probleme
Favicon wechselt nicht zwischen Themes
Symptome: Favicon bleibt unabhängig von System-Theme-Änderungen gleich
Häufige Ursachen & Lösungen:
-
Browser-Cache-Probleme
<!-- Cache-Busting-Parameter hinzufügen --> <link rel="icon" href="/favicon-light.ico?v=2025" media="(prefers-color-scheme: light)"> <link rel="icon" href="/favicon-dark.ico?v=2025" media="(prefers-color-scheme: dark)"> -
Falsche Media-Query-Syntax
<!-- ❌ Falsch --> <link rel="icon" href="/favicon-dark.ico" media="dark"> <!-- ✅ Richtig --> <link rel="icon" href="/favicon-dark.ico" media="(prefers-color-scheme: dark)">
Mehrere Favicons laden gleichzeitig
Symptome: Network-Tab zeigt mehrere Favicon-Anfragen
Lösung: JavaScript zum Ersetzen statt Hinzufügen verwenden:
function replaceFavicon(href) {
// Alle bestehenden Favicon-Links entfernen
document.querySelectorAll('link[rel*="icon"]').forEach(link => link.remove());
// Neues Favicon hinzufügen
const link = document.createElement('link');
link.rel = 'icon';
link.type = 'image/x-icon';
link.href = href;
document.head.appendChild(link);
}
SVG-Favicons werden nicht angezeigt
Symptome: SVG-Favicon funktioniert in einigen Browsern, aber nicht in anderen
Ursache: Eingeschränkte SVG-Favicon-Unterstützung in älteren Browsern
Lösung: Immer PNG-Fallbacks bereitstellen:
<!-- Moderne Browser: SVG mit Media-Queries -->
<link rel="icon" type="image/svg+xml" href="/favicon-adaptive.svg">
<!-- Fallback: PNG für ältere Browser -->
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-light-32x32.png" media="(prefers-color-scheme: light)">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-dark-32x32.png" media="(prefers-color-scheme: dark)">
Fortgeschrittene Techniken
Theme-bewusste Benachrichtigungs-Badges
class NotificationFavicon {
constructor() {
this.canvas = document.createElement('canvas');
this.ctx = this.canvas.getContext('2d');
this.canvas.width = 32;
this.canvas.height = 32;
this.baseIcons = {
light: '/favicon-light-32x32.png',
dark: '/favicon-dark-32x32.png'
};
}
async drawWithBadge(theme, count) {
const baseIcon = new Image();
baseIcon.src = this.baseIcons[theme];
return new Promise(resolve => {
baseIcon.onload = () => {
this.ctx.clearRect(0, 0, 32, 32);
this.ctx.drawImage(baseIcon, 0, 0, 32, 32);
if (count > 0) {
// Benachrichtigungs-Badge zeichnen
const badgeSize = 12;
const x = 32 - badgeSize;
const y = 0;
// Badge-Hintergrund
this.ctx.fillStyle = '#ff4444';
this.ctx.beginPath();
this.ctx.arc(x + badgeSize/2, y + badgeSize/2, badgeSize/2, 0, 2 * Math.PI);
this.ctx.fill();
// Badge-Text
this.ctx.fillStyle = 'white';
this.ctx.font = '8px Arial';
this.ctx.textAlign = 'center';
this.ctx.textBaseline = 'middle';
this.ctx.fillText(
count > 9 ? '9+' : count.toString(),
x + badgeSize/2,
y + badgeSize/2
);
}
resolve(this.canvas.toDataURL());
};
});
}
async updateWithNotification(count = 0) {
const theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
const dataUrl = await this.drawWithBadge(theme, count);
let link = document.querySelector('link[rel="icon"]');
if (!link) {
link = document.createElement('link');
link.rel = 'icon';
document.head.appendChild(link);
}
link.href = dataUrl;
}
}
// Verwendung
const notificationFavicon = new NotificationFavicon();
notificationFavicon.updateWithNotification(3); // Badge mit Zähler 3 anzeigen
Zusammenfassung und nächste Schritte
Adaptive Favicons sind ein kleines, aber wirkungsvolles Mittel zur Verbesserung der Benutzererfahrung. Sie zeigen Liebe zum Detail und Respekt für Benutzerpräferenzen und tragen zu einer professionelleren Website bei.
Die richtige Methode für Ihr Projekt wählen
| Methode | Ideal für | Komplexität | Performance |
|---|---|---|---|
| Nur HTML | Statische Websites, Blogs, Marketingseiten | Niedrig | Hervorragend |
| JavaScript | SPAs, benutzerdefinierte Themes, dynamische Updates | Mittel | Gut |
| Framework-Integration | React/Vue/Nuxt-Anwendungen | Mittel | Gut |
| Fortgeschrittene Techniken | Benachrichtigungssysteme, Echtzeit-Updates | Hoch | Variabel |
Implementierungs-Checkliste
Vor dem Deployment Ihres adaptiven Favicon-Systems:
- [ ] Sowohl helle als auch dunkle Favicon-Versionen erstellen
- [ ] In mehreren Browsern testen (Chrome, Firefox, Safari, Edge)
- [ ] Wechsel bei System-Theme-Änderungen überprüfen
- [ ] Auf Mobilgeräten testen (iOS Safari, Android Chrome)
- [ ] Dateigrößen optimieren (unter 1KB für ICO-Dateien)
- [ ] Geeignete Fallbacks für ältere Browser hinzufügen
- [ ] Implementierung mit Tools wie Favicon.im validieren
Performance-Auswirkung
Bei korrekter Implementierung haben adaptive Favicons minimale Performance-Auswirkungen:
- Reine HTML-Methode: Null JavaScript-Overhead
- Dateigrößen-Auswirkung: ~2-4KB gesamt (helle + dunkle Version)
- Ladezeit: Vernachlässigbar bei korrektem Caching
Weiterführend
Erwägen Sie diese fortgeschrittenen Optimierungen:
- Kritische Favicon-Assets vorladen für sofortigen Wechsel
- WebP-Format verwenden für moderne Browser (mit PNG-Fallbacks)
- Dynamische Favicon-Badges implementieren für Benachrichtigungen
- Favicon-Animationen hinzufügen für besondere Events oder Status
Durch eine durchdachte Implementierung adaptiver Favicons schaffen Sie eine kohärentere und benutzerfreundlichere Web-Erfahrung, die sich an moderne Benutzerpräferenzen anpasst.
Use favicon.im to quickly check if your favicon is configured correctly. Our free tool ensures your website's favicon displays properly across all browsers and devices.
Free Public Service
Favicon.im is a completely free public service trusted by developers worldwide.