social
Web-App-Manifest
MetricSpot prüft auf ein verlinktes Web-App-Manifest. Es ist nötig für Android-Installations-Prompts, das Tab-Strip-Icon und modernes PWA-Verhalten in Chromium-Browsern.
Was diese Prüfung macht
Sucht im Document-Head nach <link rel="manifest" href="...">, holt die referenzierte JSON-Datei und validiert, dass sie parst und die Felder enthält, die Browser für einen Installations-Prompt verlangen: name (oder short_name), start_url, icons mit mindestens einem 192×192 und einem 512×512, und display.
Warum es zählt
Das Manifest steuert, wie das Betriebssystem deine Seite behandelt, sobald jemand sie zum Home-Screen hinzufügt.
- Android (Chrome, Samsung Internet, Edge): Mit gültigem Manifest plus Service Worker zeigt der Browser den “Zum Home-Bildschirm hinzufügen”-Prompt. Ohne Manifest kein Installations-Banner — Nutzer:innen müssen die versteckte Menüoption finden.
- Chromebook / Desktop-Chrome / Edge: Als eigenständige App über das Omnibox-Icon der Adressleiste installierbar.
- iOS Safari: Liest
name,theme_colorundapple-touch-icon(immer noch ein separater Link). Ehrtdisplay: standaloneaus dem Manifest nicht — du brauchst zusätzlich<meta name="apple-mobile-web-app-capable" content="yes">. - Tab-Strip: Chrome nutzt
theme_coloraus dem Manifest (und dem passenden Meta-Tag) für die Hintergrundfarbe der Adressleiste.
Auch wenn du keinen PWA-Installations-Prompt willst, speist das Manifest immer noch das Favicon, das Android verwendet, wenn Nutzer:innen ein Lesezeichen anlegen, und das Icon, das Chrome im Tab-Overflow-Menü auf Mobile zeigt.
So behebst du es
1. Verlinke das Manifest von jeder Seite:
<link rel="manifest" href="/manifest.webmanifest" />
<meta name="theme-color" content="#0b0b0b" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
Die Dateiendung ist konventionell .webmanifest, aber .json funktioniert auch, solange die Antwort mit Content-Type: application/manifest+json (oder application/json) ausgeliefert wird.
2. Schreib ein minimales gültiges Manifest:
{
"name": "MetricSpot",
"short_name": "MetricSpot",
"start_url": "/",
"scope": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#0b0b0b",
"icons": [
{
"src": "/icons/icon-192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any"
},
{
"src": "/icons/icon-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "any"
},
{
"src": "/icons/maskable-512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
]
}
Das maskable-Icon ist das, was Android für das Home-Screen-Badge nutzt. Ohne es croppt Android dein Icon und du bekommst einen weißen Kreis um ein Logo. Teste mit maskable.app.
3. Liefere den richtigen Content-Type aus:
location = /manifest.webmanifest {
default_type application/manifest+json;
add_header Cache-Control "public, max-age=3600";
}
Liefert dein Host es als text/plain oder text/html aus, ignoriert Chrome die Datei stillschweigend.
Astro: Leg manifest.webmanifest in public/ — Astro kopiert es unverändert ins Site-Root. Füge das <link> in dein Basis-Layout.
Next.js (App Router): Exportiere ein typisiertes Manifest aus app/manifest.ts, und Next emittiert das JSON zur Build-Zeit:
// app/manifest.ts
import type { MetadataRoute } from "next";
export default function manifest(): MetadataRoute.Manifest {
return {
name: "MetricSpot",
short_name: "MetricSpot",
start_url: "/",
display: "standalone",
background_color: "#ffffff",
theme_color: "#0b0b0b",
icons: [
{ src: "/icons/icon-192.png", sizes: "192x192", type: "image/png" },
{ src: "/icons/icon-512.png", sizes: "512x512", type: "image/png" },
],
};
}
Das <link rel="manifest"> wird von Next automatisch injiziert, wenn diese Datei existiert.
WordPress: Der einfachste Weg ist ein PWA-Plugin (PWA by 10up oder Super Progressive Web Apps). Oder schreib das Manifest selbst, leg es ins Theme-Root und füge das <link>-Tag via wp_head hinzu:
add_action('wp_head', function () {
echo '<link rel="manifest" href="' . esc_url(get_template_directory_uri() . '/manifest.webmanifest') . '">';
});
4. Kombiniere mit den richtigen Meta-Tags. Das Manifest erledigt den Großteil, aber iOS Safari und ältere Crawler wollen weiterhin die separaten Tags:
<meta name="theme-color" content="#0b0b0b" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
Siehe auch Apple Touch Icon und Favicon für den Rest des Icon-Sets.
Häufig gestellte Fragen
Brauche ich einen Service Worker, um diese Prüfung zu bestehen?
Nein. Die Manifest-Prüfung verifiziert nur das <link> und die JSON-Datei. Einen Service Worker brauchst du, um auf Android als PWA installierbar zu sein — ohne ihn erscheint der Installations-Prompt auch bei perfektem Manifest nicht. Das Manifest allein gibt dir trotzdem ein besseres Home-Screen-Icon und Tab-Strip-Metadaten.
Warum erscheint mein Installations-Prompt auf Android nicht?
Drei Dinge sind nötig: ein gültiges Manifest mit 192×192- und 512×512-Icons, ein Service Worker, der fetch-Events handhabt, und die Seite muss über HTTPS ausgeliefert werden. Prüfe chrome://inspect → “Devices” → dein Tab → Application → Manifest in den DevTools — Chrome listet exakt, welche Installations-Kriterien fehlen.
Was ist der Unterschied zwischen display: standalone und display: fullscreen?
standalone blendet das Browser-Chrome aus, behält aber die OS-Statusleiste (Benachrichtigungen, Uhrzeit, Akku) — was die meisten Apps wollen. fullscreen blendet alles aus und passt meist nur zu Spielen. minimal-ui behält eine dünne Browser-Leiste mit Zurück/Vorwärts; selten genutzt. Die meisten installierbaren Apps wollen standalone.
Quellen
Zuletzt aktualisiert 2026-05-11