Öffnen Sie den Quellcode Ihrer Website (Strg+U auf Windows, Cmd+Option+U auf dem Mac). Scrollen Sie zum <head>-Bereich. Zwischen charset, Viewport und dem Theme-CSS liegen oft Dutzende <link>- und <script>-Zeilen, die kein Redakteur bestellt hat: Kommentar-Feeds, ein Windows-Live-Writer-Manifest, Emoji-Polyfills von s.w.org, Shortlinks mit ?p=123 und ein Generator-Meta-Tag mit der Core-Version.
Diese Artefakte kommen aus wp_head(). Core hängt dort Callbacks ein. Mit remove_action() nehmen Sie gezielt wieder heraus, was Ihr Projekt nicht braucht. Der Beitrag dokumentiert jedes typische Artefakt, eine sichere Entfernungsliste, Dinge die Sie stehen lassen sollten, den Unterschied zwischen Emoji-Skript und Emoji-Styles, die Beziehung von Shortlink zu Canonical sowie die Entscheidung zwischen Must-Use-Plugin und Theme-functions.php.
Bezug zur Praxis in DACH: Auf einem WooCommerce-Shop mit Elementor und zehn Plugins wuchs der <head> einer Mode-Marke aus Stuttgart auf über 40 Tags. Nach dem Cleanup lagen noch Theme-CSS, Favicons, Canonical und die restlichen Plugin-Assets. Der Lighthouse-LCP-Wert verbesserte sich nicht dramatisch, aber der HTML-Payload schrumpfte, und Debugging im Network-Panel wurde wieder lesbar. Genau das ist der Job: weniger Rauschen, nicht Marketing-Zahlen.
Was wp_head tatsächlich ausgibt
wp_head ist ein Action-Hook. Themes rufen ihn in header.php oder im Block-Theme über wp_head() auf. Core und Plugins registrieren Callbacks mit Prioritäten. Entfernen Sie einen Callback, verschwindet nur dessen Ausgabe, der Hook selbst bleibt.
Typische Core-Artefakte im Frontend-<head>:
| Callback / Tag | Was es tut | Nutzen 2026 |
|---|---|---|
feed_links | <link rel="alternate"> für Posts-Feed und Kommentare-Feed | Posts-Feed oft noch, Kommentar-Feed selten |
feed_links_extra | Feeds für Kategorien, Tags, Autoren, Suchen, Anhänge | Meist Ballast |
rsd_link | Really Simple Discovery für Remote-Publishing | Legacy |
wlwmanifest_link | Manifest für Windows Live Writer | Tot seit 2017 |
wp_generator | meta name="generator" mit Core-Version | Leak ohne Nutzen |
print_emoji_detection_script | Inline-Skript plus Request zu s.w.org | Browser rendern Emojis nativ |
print_emoji_styles | CSS für Emoji-Fallbacks | Oft überflüssig |
wp_shortlink_wp_head | <link rel="shortlink"> mit ?p=ID | Canonical deckt SEO ab |
adjacent_posts_rel_link_wp_head | rel="prev" / rel="next" zwischen Posts | Kaum Ranking-Effekt |
rest_output_link_wp_head | Discovery-Link zur REST-API | Behalten, wenn Gutenberg, Apps oder Headless laufen |
wp_oembed_add_discovery_links | oEmbed-Discovery | Behalten, wenn Embeds von außen kommen sollen |
rel_canonical | Canonical-URL der aktuellen Ansicht | Behalten |
Die Tabelle ersetzt Blindflug. Vor dem ersten remove_action lohnt ein Blick in den Quelltext einer Staging-Seite und ein Abgleich mit dieser Liste.
Sichere remove_action-Liste
Die folgende Funktion ist der Kern. Sie hängt an init, damit Themes und Plugins ihre eigenen Hooks bereits registriert haben, bevor Sie sie entfernen. Prioritäten müssen zu den Original-Registrierungen passen: feed_links läuft mit Priorität 2, feed_links_extra mit 3, das Emoji-Detection-Skript mit 7.
/**
* WordPress head-Bereich bereinigen.
* Entfernt Legacy-Links, Generator, Emojis und Shortlinks.
*/
function wppoland_cleanup_head() {
// RSS: Haupt- und Extra-Feeds aus dem Head nehmen.
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
add_filter( 'feed_links_show_comments_feed', '__return_false' );
// Windows Live Writer und RSD.
remove_action( 'wp_head', 'wlwmanifest_link' );
remove_action( 'wp_head', 'rsd_link' );
// Generator-Meta und Generator-Filter (RSS/Atom).
remove_action( 'wp_head', 'wp_generator' );
add_filter( 'the_generator', '__return_empty_string' );
// Emoji-Detection und Styles (Frontend + Admin-Print).
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
// Shortlink im Head und im HTTP-Header.
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );
remove_action( 'template_redirect', 'wp_shortlink_header', 11, 0 );
// Adjacent Posts.
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
}
add_action( 'init', 'wppoland_cleanup_head' );Hinweise zur Anwendung:
- Wenn Sie den Haupt-Feed für Newsletter-Tools (zum Beispiel Feedburner-Nachfolger oder externe Aggregatoren) brauchen, lassen Sie
feed_linksstehen und entfernen nurfeed_links_extraplus den Kommentar-Feed-Filter. wlwmanifest_linkundrsd_linkkönnen Sie auf praktisch jeder öffentlichen Site streichen. Remote-Publishing über XML-RPC ist ohnehin ein eigenes Risikothema.the_generatorgreift auch in Feed-XML. Leerer String verhindert Versionsnummern dort ebenfalls.
Was Sie nicht entfernen sollten
Cleanup endet dort, wo Core und Editor noch funktionieren müssen. Drei Klassen gehören in die Schonliste.
REST-API-Discovery
rest_output_link_wp_head schreibt einen Link auf /wp-json/. Gutenberg, der Site-Editor, viele Formular-Plugins und Headless-Frontends brauchen die REST-API. Entfernen Sie den Discovery-Link pauschal, bricht nichts sofort, aber Clients finden den Endpunkt schwerer, und Sie lösen ein Scheinproblem. Wer REST wirklich absichern will, beschränkt Authentifizierung und Routen, statt den Link zu verstecken.
Theme- und Plugin-CSS
Stylesheets kommen über wp_enqueue_style und landen über wp_print_styles im Head. Wer wp_head komplett leert oder pauschal alle Styles killt, zerstört das Layout. Cleanup zielt auf Core-Legacy-Callbacks, nicht auf wp_enqueue_*. Dasselbe gilt für wp_enqueue_script von Theme und Plugins: nur gezielt deregistrieren, wenn Sie die Abhängigkeit kennen.
Canonical und kritische Meta
rel_canonical bleibt. Ohne Canonical riskieren Sie Duplicate-Content-Signale bei Varianten mit Query-Strings, Pagination oder Tracking-Parametern. Open-Graph- und Twitter-Tags von SEO-Plugins lassen Sie ebenfalls unangetastet, sofern das Plugin sie sauber setzt.
Kurz: Feed-Extra, Writer-Manifest, Generator, Emojis und Shortlinks sind Kandidaten. REST, CSS, Canonical und Editor-Assets sind Infrastruktur.
Emoji-Skripte und Emoji-Styles trennen
Viele Snippets entfernen nur das Detection-Skript und vergessen die Styles, oder umgekehrt. Core trennt die Pfade bewusst.
print_emoji_detection_script hängt an wp_head (Priorität 7) und an admin_print_scripts. Es injiziert JavaScript, das prüft, ob der Browser Emojis nativ zeichnet, und lädt sonst Assets von s.w.org. Auf modernen Desktop- und Mobilbrowsern im DACH-Raum ist das Polyfill überflüssig. Der Request zu s.w.org kostet DNS und TLS, auch wenn die Antwort klein ist.
print_emoji_styles hängt an wp_print_styles und admin_print_styles. Das CSS steuert Fallbacks und Größen. Entfernen Sie nur das Skript, bleibt oft noch unnötiges CSS. Entfernen Sie beides, bleiben Emojis in Contributions trotzdem lesbar, weil Systeme sie als Unicode zeichnen.
Zusätzliche Filter (wp_staticize_emoji, wp_staticize_emoji_for_email) wandeln Emojis in Feeds und Mails in Bilder um. Für redaktionelle Sites ohne Emoji-lastige Newsletter können Sie die Filter mitentfernen. Ein Magazin in Hamburg, das in Slack und Mail viel mit Emojis arbeitet, lässt die Mail-Filter lieber stehen und räumt nur Frontend-Head auf.
Admin-Hooks mitentfernen: Sonst bleibt der Ballast im Dashboard. Frontend-only Cleanup spart dem Besucher Bytes, nicht dem Redakteur beim Speichern.
Shortlinks und Canonical
wp_shortlink_wp_head schreibt <link rel="shortlink" href="https://example.com/?p=42" />. Zusätzlich setzt wp_shortlink_header einen HTTP-Header Link: <...>; rel=shortlink. Beide sind Komfort für alte Sharing-Tools. Suchmaschinen folgen dem Canonical, nicht dem Shortlink.
rel_canonical zeigt auf die kanonische Permalink-URL. Shortlink und Canonical widersprechen sich nicht direkt, aber zwei URL-Signale für dieselbe Ressource erzeugen Rauschen. Shortlink weg, Canonical bleibt: klare Präferenz für den Pretty-Permalink.
Wenn ein Redirect-Plugin oder ein CDN Short-URLs pflegt, prüfen Sie nach dem Cleanup einmal die Response-Header in den DevTools (Network → Dokument → Response Headers). Der Link-Header mit rel=shortlink sollte verschwunden sein. Canonical im HTML bleibt sichtbar.
Must-Use-Plugin oder Theme-functions.php
Beide Orte funktionieren. Die Betriebsfrage ist Überlebensdauer.
functions.php im Child-Theme ist schnell: FTP oder Theme-Editor, speichern, fertig. Nachteil: Theme-Wechsel oder ein neues Child löscht die Logik. Agenturen, die Kunden-Themes austauschen, verlieren den Cleanup still.
Ein Must-Use-Plugin unter wp-content/mu-plugins/wppoland-clean-head.php lädt WordPress automatisch, ohne Aktivierungsklick. Theme-Wechsel ändert nichts. Deployment per Git oder rsync bleibt einfach, weil die Datei außerhalb des Themes liegt. Auf Hostern wie Raidboxes oder All-Inkl legen Sie den Ordner einmal an und versionieren die Datei mit dem Rest des Projekts.
Empfehlung für Produktionssites: mu-plugin. Empfehlung für Einmal-Experimente auf Staging: Child-Theme ist akzeptabel, solange Sie die Funktion später migrieren. Vermeiden Sie Parent-Theme-Edits; Updates überschreiben sie.
Beispiel-Gerüst für ein mu-plugin:
<?php
/**
* Plugin Name: WPPoland Clean Head
* Description: Entfernt Legacy-wp_head-Artefakte.
* Author: wppoland.com
* Version: 1.0.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
require_once __DIR__ . '/includes/cleanup-head.php';Die eigentliche wppoland_cleanup_head-Funktion liegt dann in includes/cleanup-head.php. So bleibt die Bootstrap-Datei kurz und testbar.
Verifikation im Quelltext
Nach dem Deploy öffnen Sie eine öffentliche URL im Inkognito-Fenster und prüfen drei Ebenen.
- Seitenquelltext (
Strg+U): Suchen Sie nachwlwmanifest,EditURI,emoji,shortlink,generatorundalternate. Die Legacy-Treffer sollten fehlen. Canonical, Stylesheets und notwendige Plugin-Tags bleiben. - DevTools Network: Filtern Sie nach
s.w.org. Nach Emoji-Cleanup sollte kein Request mehr erscheinen. Zählen Sie Head-Requests vor und nach dem Change auf derselben URL. - Response-Header: Kein
Link-Header mitrel=shortlink. Generator gehört nicht in HTTP-Header von Core, aber manche Security-Plugins setzen eigene Header; die bleiben unberührt.
Checkliste für den Abnahme-Lauf:
- Staging und Produktion getrennt testen; Object-Cache und Page-Cache leeren.
- Eine Beitragsseite, eine Archivseite und die Startseite prüfen (Extra-Feeds verhalten sich unterschiedlich).
- WooCommerce-Produktseite extra checken: Plugins hängen dort oft zusätzliche Tags ein, die nicht von diesem Snippet kommen.
- Gutenberg-Editor einmal öffnen und speichern: REST muss antworten.
- Optional PageSpeed oder WebPageTest: HTML-Bytes und Third-Party-Domains vergleichen. Erwarten Sie keine Wunder-Scores; erwarten Sie weniger Rauschen.
Ein Fall aus der Praxis: Nach dem Cleanup auf einer Verbandsseite in München zeigte der Quelltext weiterhin emoji-release.min.js. Ursache war nicht Core, sondern ein Social-Plugin, das denselben CDN-Pfad nachlud. remove_action auf Core-Hooks reicht dann nicht; das Plugin muss konfiguriert oder ersetzt werden. Deshalb immer den sichtbaren Quelltext lesen, nicht nur dem Snippet vertrauen.
Feed-Entscheidung im Detail
RSS ist nicht tot. Podcasts, Newsletter-Importe und Monitoring-Tools lesen /feed/ weiterhin. Kommentar-Feeds und taxonomiespezifische Feeds dagegen erzeugen selten Traffic und blähen den Head auf Archiven auf.
Pragmatische Stufen:
- Nur Kommentar-Feed aus (
feed_links_show_comments_feed→ false). Haupt-Feed bleibt. - Extra-Feeds aus (
feed_links_extraentfernen). Kategorien und Tags verlieren Autodiscovery im Head; die Feed-URLs existieren weiter, falls jemand die URL kennt. - Alle Feed-Links aus dem Head (
feed_linksundfeed_links_extra). Die Endpunkte bleiben erreichbar, nur Autodiscovery entfällt.
Stufe 1 oder 2 reicht für die meisten Unternehmenssites. Stufe 3 nur, wenn wirklich niemand den Feed abonniert und Sie das bewusst wollen.
Generator und Versionsleakage
wp_generator schreibt die Core-Version ins HTML. Das ist kein Einbruch, aber Scanner priorisieren bekannte CVE-Versionen. Entfernen Sie den Meta-Tag und leeren Sie the_generator. Härten Sie parallel Query-Strings an Assets (style.css?ver=6.x), wenn Security-Plugins das anbieten. Head-Cleanup allein ist kein Security-Programm; er reduziert ein Signal.
Adjacent Posts und SEO-Mythen
rel="prev" und rel="next" zwischen Einzelbeiträgen halfen früher bei Serialisierung. Für moderne Crawler ist der Effekt vernachlässigbar. Auf Magazin-Sites mit langer Artikelkette können Sie die Links behalten; auf Service- und Shop-Sites entfernen Sie sie ohne Reue. Interne Verlinkung im Content und sinnvolle Sitemaps wiegen schwerer.
Zusammenspiel mit Caching und Optimierern
Autoptimize, FlyingPress, WP Rocket und ähnliche Tools ändern Reihenfolge und Kombination von Assets. Ihr remove_action-Snippet sollte vor dem HTML-Cache greifen, also in PHP, nicht als nachträglicher String-Replace im Optimizer. Wenn ein Optimizer Emoji-Skripte erneut injiziert oder Third-Party-Domains freigibt, prüfen Sie dessen Whitelist.
Object-Cache speichert keine wp_head-Ausgabe dauerhaft pro Request in dem Sinne, dass remove_action wirkungslos würde. Page-Cache schon: alte HTML-Kopien behalten den Ballast, bis der Cache leer ist. Nach dem Deploy Cache purge ist Pflicht.
Häufige Fehler
Falsche Priorität: remove_action( 'wp_head', 'feed_links' ) ohne Priorität 2 trifft den Callback nicht. Core registriert mit Priorität; Ihre Entfernung muss dieselbe Zahl tragen.
Zu früher Hook: Wenn Sie remove_action direkt in der Plugin-Datei ohne init ausführen, sind manche Callbacks noch nicht registriert. init oder wp_loaded sind sicherer als Top-Level-Code.
Parent-Theme überschrieben: Update kommt, Cleanup weg. Child oder mu-plugin nutzen.
REST mitentfernt aus Copy-Paste-Listen im Netz: Editor bricht oder Headless-Apps finden /wp-json/ nicht. Listen aus Foren von 2014 ungeprüft übernehmen ist riskant; gegen die Tabelle in diesem Beitrag halten.
Nur Frontend getestet: Admin behält Emoji-Ballast. Das stört Besucher nicht, aber Redakteure auf langsamen VPN-Strecken schon. Admin-Hooks mitnehmen, wenn das Team zustimmt.
Zusammenfassung
wp_head sammelt Core-, Theme- und Plugin-Ausgabe. Legacy-Artefakte (Writer, RSD, Extra-Feeds, Generator, Emoji-Polyfill, Shortlink, Adjacent) dürfen Sie gezielt mit remove_action und wenigen Filtern streichen. REST-Discovery, enqueued CSS/JS und Canonical bleiben. Emoji-Skript und Emoji-Styles getrennt behandeln. Shortlink entfernen, Canonical behalten. Die Logik gehört ins mu-plugin, nicht ins Parent-Theme. Verifikation läuft über Quelltextsuche, Network-Panel und Response-Header, plus Cache-Purge.
Referenzen aus dem Developer Handbook: wp_head, remove_action, feed_links, feed_links_extra, print_emoji_detection_script, print_emoji_styles, wp_shortlink_wp_head, wp_generator, rsd_link, wlwmanifest_link, rel_canonical.
Brauchen Sie Hilfe bei der Umsetzung auf Staging und Produktion? Als WordPress-Spezialist bereinige ich wp_head projektbezogen und prüfe den Quelltext mit Ihnen gemeinsam.







