Jak oczyścić nagłówek WordPress (usuń RSS, emoji, shortlinki)

Jak oczyścić nagłówek WordPress (usuń RSS, emoji, shortlinki)

Ostatnio zweryfikowano: 16 października 2026
17 min czytania
Przewodnik
Full-stack developer

Otwórz kod źródłowy swojej strony (Ctrl+U w Windows, Cmd+Option+U na Macu) i przewiń do sekcji <head>. Między charset, viewportem a CSS motywu często stoi kilkanaście linii <link>, <meta> i <script>, o które nikt w redakcji nie prosił: kanały komentarzy, link wykrywania RSD, blok ustawień emoji, shortlink z ?p=123 i meta tag generatora z wersją rdzenia.

Te elementy pochodzą z wp_head(). Rdzeń podpina pod ten hook callbacki, a remove_action() wyjmuje z powrotem to, czego Twój projekt nie potrzebuje. Ten poradnik omawia każdy typowy element, bezpieczną listę do usunięcia sprawdzoną z plikiem wp-includes/default-filters.php w WordPress 7.1.3, rzeczy, których nie należy ruszać, różnicę między skryptem emoji a stylami emoji, shortlink kontra canonical, nagłówki na poziomie HTTP oraz wybór między mu-pluginem a plikiem functions.php motywu.

Celem jest mniej szumu w HTML i w panelu sieci. Usunięcie tych tagów samo w sobie nie poprawi wyniku Lighthouse, ale znów czyni dokument czytelnym i zamyka kilka drobnych wycieków informacji. Jeśli chodzi Ci o czas ładowania, zobacz audyt Core Web Vitals.

#Co wp_head wypisuje w nagłówku WordPress

wp_head to hook akcji. Klasyczne motywy wywołują wp_head() w header.php, a motywy blokowe dostają to wywołanie z kanwy szablonu w rdzeniu. Rdzeń i wtyczki rejestrują na nim callbacki z priorytetami. Usunięcie callbacku usuwa tylko jego wynik, sam hook dalej się wykonuje.

Typowe callbacki rdzenia w <head> frontendu WordPress 7.1, z priorytetem z default-filters.php:

CallbackPriorytetCo wypisujeOcena
feed_links2<link rel="alternate"> dla kanału wpisów i kanału komentarzyKanał wpisów często nadal przydatny, kanał komentarzy rzadko
feed_links_extra3Kanały kategorii, tagów, autorów, wyszukiwań, komentarzy do wpisuGłównie szum
wp_oembed_add_discovery_links4Linki wykrywania oEmbed JSON i XML na widokach pojedynczychZostaw, jeśli inne strony osadzają Twoje wpisy
print_emoji_detection_script7Planuje ustawienia emoji i loader (od 6.9 wypisywane w stopce)Nowoczesne przeglądarki rysują emoji natywnie
rsd_link10<link rel="EditURI"> do xmlrpc.php?rsdPrzestarzałe
wp_generator10meta name="generator" z wersją rdzeniaWyciek bez żadnej korzyści
rel_canonical10Kanoniczny URL bieżącego widokuZostaw
wp_shortlink_wp_head10<link rel="shortlink"> z ?p=IDCanonical załatwia SEO
rest_output_link_wp_head10Link wykrywania REST APIZostaw, gdy działa edytor, aplikacje albo frontend headless
wp_site_icon99Favicon i ikony dotykoweZostaw
wp_custom_css_cb101Dodatkowy CSS z CustomizeraZostaw

Dwóch wierszy, o których wciąż wspominają starsze fragmenty kodu, na tej liście już nie ma. wlwmanifest_link został oznaczony jako przestarzały w WordPress 6.3 i nie jest już podpinany, a adjacent_posts_rel_link_wp_head nie jest używany przez rdzeń od 5.6. Style emoji przeszły w 6.4 z print_emoji_styles do wp_enqueue_emoji_styles. Każdą z tych zmian omawiam niżej.

Tabela zastępuje zgadywanie. Przed pierwszym remove_action obejrzyj źródło strony na stagingu i porównaj je z tą listą.

#Jak oczyścić nagłówek WordPress przez remove_action

Poniższa funkcja to rdzeń czyszczenia. Działa na init, więc usuwane callbacki są już zarejestrowane. Podany priorytet musi zgadzać się z pierwotną rejestracją: feed_links jest rejestrowany z 2, feed_links_extra z 3, skrypt wykrywania emoji z 7. remove_action() przyjmuje trzy parametry (hook, callback, priorytet), czwarty argument, który przekazuje wiele fragmentów kodu, jest ignorowany.

/**
 * Czyszczenie sekcji head WordPressa.
 * Usuwa przestarzałe linki, generator, zasoby emoji i shortlinki.
 */
function wppoland_cleanup_head() {
	// RSS: główne i dodatkowe linki kanałów poza head.
	remove_action( 'wp_head', 'feed_links', 2 );
	remove_action( 'wp_head', 'feed_links_extra', 3 );

	// Really Simple Discovery (link EditURI).
	remove_action( 'wp_head', 'rsd_link' );

	// Meta tag generatora i generator w kanałach.
	remove_action( 'wp_head', 'wp_generator' );
	add_filter( 'the_generator', '__return_empty_string' );

	// Emoji: skrypt wykrywania, style, konwersja w kanałach i mailach.
	remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
	remove_action( 'embed_head', 'print_emoji_detection_script' );
	remove_action( 'wp_print_styles', 'print_emoji_styles' );
	remove_action( 'admin_print_styles', 'print_emoji_styles' );
	remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
	remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
	remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );

	// Shortlink w head HTML i w nagłówku HTTP Link.
	remove_action( 'wp_head', 'wp_shortlink_wp_head', 10 );
	remove_action( 'template_redirect', 'wp_shortlink_header', 11 );
}
add_action( 'init', 'wppoland_cleanup_head' );

Uwagi do stosowania:

  • Jeśli Twój główny kanał czytają narzędzia newsletterowe albo zewnętrzne agregatory, zostaw feed_links i wyłącz tylko niepotrzebne kanały filtrami opisanymi niżej w sekcji o RSS.
  • rsd_link można usunąć praktycznie na każdej publicznej stronie. Zdalne publikowanie przez XML-RPC to i tak osobny temat ryzyka.
  • the_generator działa też na XML kanałów. Pusty string usuwa numer wersji również tam.

#Które linie remove_action nic nie robią w WordPress 7

Fragmenty kodu do czyszczenia kopiowane z forów zawierają linie, które nie pasują już do niczego w rdzeniu. Nie psują strony, bo remove_action() po prostu zwraca false, gdy callback nie jest zarejestrowany. Wprowadzają za to w błąd kolejnego developera, który myśli, że linia coś robi.

  • remove_action( 'wp_head', 'wlwmanifest_link' ): link do manifestu Windows Live Writer został oznaczony jako przestarzały w WordPress 6.3. Funkcja zgłasza teraz tylko komunikat o przestarzałości, a rdzeń jej nie podpina. Zostaw tę linię tylko wtedy, gdy nadal obsługujesz strony poniżej 6.3.
  • remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10 ): funkcja wciąż istnieje, ale jej własny docblock mówi, że rdzeń nie używa jej od 5.6. Jeśli widzisz rel="prev" i rel="next" na pojedynczych wpisach, dodaje je motyw albo wtyczka.
  • start_post_rel_link, index_rel_link, parent_post_rel_link: przestarzałe od WordPress 3.3. Żadna nowoczesna instalacja ich nie podpina.
  • remove_filter( 'wp_resource_hints', 'wp_dependencies_emoji_styles' ): w rdzeniu nie ma takiej funkcji. DNS prefetch do s.w.org, który ta linia miała zatrzymać, został usunięty z wp_resource_hints() w WordPress 6.1.
  • add_filter( 'rest_enabled', '__return_false' ): filtr jest przestarzały od 4.7. Rdzeń wskazuje w zamian rest_authentication_errors, a REST API nie da się już w ten sposób wyłączyć.

Usunięcie tych linii skraca plik i ułatwia przegląd kodu. Punktem odniesienia do porównań jest źródło default-filters.php w 7.1.3.

#Których wpisów wp_head nie usuwać

Czyszczenie kończy się tam, gdzie rdzeń i edytor nadal muszą działać. Na liście rzeczy do zostawienia są cztery grupy.

#Wykrywanie REST API

rest_output_link_wp_head zapisuje link do /wp-json/, a rest_output_link_header wysyła ten sam link jako nagłówek HTTP. Edytor blokowy, edytor witryny, wiele wtyczek formularzy i frontendy headless WordPress zależą od REST API. Usunięcie linku wykrywania nie psuje niczego od razu, ale klienty trudniej znajdują endpoint, a Ty rozwiązujesz problem, którego nie ma. Żeby zabezpieczyć REST API, ogranicz uwierzytelnianie i trasy zamiast ukrywać link.

#CSS motywu i wtyczek

Arkusze stylów trafiają przez wp_enqueue_style i są wypisywane przez wp_print_styles z priorytetem 8. Całkowite opróżnienie wp_head albo wyłączenie wszystkich stylów niszczy układ strony. Czyszczenie dotyczy przestarzałych callbacków rdzenia, nie wp_enqueue_*. To samo dotyczy skryptów dodawanych przez motyw i wtyczki: wyrejestrowuj je tylko wtedy, gdy znasz zależność.

#Canonical, Open Graph i meta tagi

rel_canonical zostaje. Bez canonical ryzykujesz sygnały zduplikowanej treści na wariantach z query stringami, paginacją albo parametrami śledzącymi. Open Graph i tagi społecznościowe z wtyczek SEO zostają nietknięte, o ile wtyczka ustawia je poprawnie.

#Title, robots, ikony i własny CSS

_wp_render_title_tag i wp_robots działają z priorytetem 1 i wypisują <title> oraz meta robots. wp_site_icon wypisuje favicon z priorytetem 99, a wp_custom_css_cb wypisuje dodatkowy CSS z Customizera ze 101. Żaden z nich nie jest zbędnym balastem.

W skrócie: dodatkowe kanały, RSD, generator, zasoby emoji i shortlinki są kandydatami do usunięcia. REST, CSS, canonical, title, robots i ikony to infrastruktura.

#Jak wyłączyć emoji w WordPress bez wtyczki

Wiele fragmentów kodu usuwa tylko skrypt wykrywania i zapomina o stylach albo odwrotnie. Rdzeń trzyma te dwie ścieżki osobno i obie zmieniły się w ostatnich wydaniach.

print_emoji_detection_script jest podpięty pod wp_head z priorytetem 7 oraz pod admin_print_scripts. Od WordPress 6.9 nie wypisuje już niczego inline w head. Planuje _print_emoji_detection_script na wp_print_footer_scripts, który wypisuje blok ustawień JSON (id="wp-emoji-settings") i loader emoji jako skrypt type="module" przed </body>. Loader sprawdza, czy przeglądarka rysuje emoji natywnie, i zapisuje wynik w sessionStorage. Dopiero gdy test się nie powiedzie, dodaje wp-emoji-release.min.js, który zamienia emoji na obrazki z s.w.org. W aktualnej przeglądarce kosztem są ustawienia inline i kod loadera (niezminifikowane źródło loadera ma około 13 KB), a nie pobranie pełnego polyfilla.

Style poszły inną drogą. print_emoji_styles został oznaczony jako przestarzały w 6.4 i zastąpiony przez wp_enqueue_emoji_styles, który dodaje styl inline pod uchwytem wp-emoji-styles. Dla zgodności wstecznej rdzeń nadal podpina print_emoji_styles pod wp_print_styles, a nowa funkcja kończy działanie od razu, jeśli ten hook został usunięty. Dlatego remove_action( 'wp_print_styles', 'print_emoji_styles' ) nadal działa w 7.1. Równoważna i bardziej bezpośrednia linia to remove_action( 'wp_enqueue_scripts', 'wp_enqueue_emoji_styles' ).

Filtry wp_staticize_emoji (na the_content_feed i comment_text_rss) oraz wp_staticize_emoji_for_email (na wp_mail) zamieniają emoji na obrazki w kanałach i mailach. Na stronach redakcyjnych bez newsletterów pełnych emoji możesz usunąć także je. Jeśli Twoje maile z powiadomieniami opierają się na emoji, zostaw filtr maili i czyść tylko frontend.

Usuń też hooki panelu administracyjnego, inaczej zasoby emoji zostaną w kokpicie. Czyszczenie samego frontendu oszczędza bajty odwiedzającym, nie redaktorom.

#Jak hostować obrazki emoji WordPress u siebie

Usunięcie to jedna z opcji. Jeśli chcesz zachować obsługę emoji dla starych przeglądarek, ale uniknąć żądań do domeny zewnętrznej, skieruj bazowe adresy obrazków na własny serwer. Rdzeń udostępnia do tego dwa filtry: emoji_url dla zestawu PNG i emoji_svg_url dla zestawu SVG. W WordPress 7.1 wartości domyślne to https://s.w.org/images/core/emoji/17.0.2/72x72/ i https://s.w.org/images/core/emoji/17.0.2/svg/.

add_filter( 'emoji_url', function () {
	return content_url( '/emoji/17.0.2/72x72/' );
} );
add_filter( 'emoji_svg_url', function () {
	return content_url( '/emoji/17.0.2/svg/' );
} );

Segment wersji w ścieżce zmienia się, gdy rdzeń aktualizuje swój zestaw emoji, więc kopię hostowaną u siebie trzeba odświeżać przy głównych wydaniach. wp_staticize_emoji używa tego samego filtra emoji_url dla kanałów, więc jedna zmiana obejmuje oba miejsca.

wp_shortlink_wp_head zapisuje <link rel="shortlink" href="https://example.com/?p=42" />. Dodatkowo wp_shortlink_header działa na template_redirect z priorytetem 11 i wysyła nagłówek HTTP Link: <...>; rel=shortlink. Oba są udogodnieniem dla starych narzędzi do udostępniania. Wyszukiwarki kierują się canonical, nie shortlinkiem.

rel_canonical wskazuje kanoniczny permalink. Shortlink i canonical nie przeczą sobie wprost, ale dwa sygnały URL dla tego samego zasobu dokładają szumu. Shortlink usunięty, canonical zostaje: to jasna preferencja dla ładnego permalinku.

Jeśli krótkie adresy URL obsługuje wtyczka przekierowań albo CDN, po czyszczeniu sprawdź raz nagłówki odpowiedzi w DevTools (Network, potem żądanie dokumentu, potem Response Headers). Nagłówek Link z rel=shortlink powinien zniknąć. Canonical w HTML pozostaje widoczny.

#Jak usunąć X-Pingback i inne nagłówki HTTP WordPressa

<head> to tylko połowa tego, co dodaje WordPress. Trzy nagłówki odpowiedzi pochodzą z rdzenia.

  • X-Pingback: od WordPress 4.4 WP::send_headers() dodaje go tylko na widokach pojedynczych wpisów, które przyjmują pingi. Wskazuje na xmlrpc.php.
  • Link: <...>; rel=shortlink: wysyłany przez wp_shortlink_header, usuwany kodem do shortlinków opisanym wyżej.
  • Link: <...>; rel="https://api.w.org/": wysyłany przez rest_output_link_header. Zostaw go z tych samych powodów co link REST w HTML.

Wszystkie nagłówki zebrane przez WP::send_headers() przechodzą przez filtr wp_headers (dostępny od 2.8), więc X-Pingback można usunąć właśnie tam:

add_filter( 'wp_headers', function ( $headers ) {
	unset( $headers['X-Pingback'] );
	return $headers;
} );

Jeśli pingi przy wpisie są zamknięte, nagłówek w ogóle nie jest wysyłany. Rdzeń nie podpina tagu <link rel="pingback"> pod wp_head. Jeśli widzisz go w źródle, pochodzi z header.php motywu.

#Czyszczenie nagłówka w mu-pluginie czy w functions.php

Oba miejsca działają. Pytanie operacyjne brzmi: co przetrwa.

functions.php w motywie potomnym jest szybki: SFTP albo edytor motywu, zapis, gotowe. Wada: zmiana motywu albo nowy motyw potomny kasuje logikę. Agencje, które wymieniają motywy klientów, tracą czyszczenie po cichu.

Mu-plugin w wp-content/mu-plugins/wppoland-clean-head.php ładuje się automatycznie, bez klikania aktywacji. Zmiana motywu niczego nie zmienia. Wdrożenie przez Git albo rsync zostaje proste, bo plik leży poza motywem. Utwórz folder raz i wersjonuj plik razem z resztą projektu.

Rekomendacja dla stron produkcyjnych: mu-plugin. Do jednorazowych eksperymentów na stagingu motyw potomny jest do przyjęcia, o ile później przeniesiesz funkcję. Unikaj edycji motywu nadrzędnego, bo aktualizacje go nadpisują.

Szkielet mu-pluginu:

<?php
/**
 * Plugin Name: WPPoland Clean Head
 * Description: Removes legacy wp_head artefacts.
 * Author: wppoland.com
 * Version: 1.0.0
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

require_once __DIR__ . '/includes/cleanup-head.php';

Właściwa funkcja wppoland_cleanup_head mieszka wtedy w includes/cleanup-head.php. Plik startowy zostaje krótki i łatwy do testowania. Przy każdym usunięciu dodaj komentarz, który mówi, dlaczego tam jest:

// Usunięcie wykrywania emoji: każda obsługiwana przeglądarka rysuje emoji natywnie.
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );

#Czyszczenie wp_head tylko na frontendzie lub dla headless

Niektóre usunięcia pasują tylko do określonych kontekstów. Poniższy przykład zostawia link REST, gdy własna stała oznacza stronę jako headless.

function wppoland_conditional_head_cleanup() {
	// WPPOLAND_HEADLESS to stała projektu ustawiona w wp-config.php.
	if ( ! defined( 'WPPOLAND_HEADLESS' ) || ! WPPOLAND_HEADLESS ) {
		remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
	}
}
add_action( 'init', 'wppoland_conditional_head_cleanup' );

#Jak włączać i wyłączać poszczególne części czyszczenia

Na stronach, na których integracje różnią się między środowiskami, owiń każdą grupę usunięć stałą z wp-config.php. Grupa działa, chyba że jej stała jest zdefiniowana jako false:

/**
 * Konfiguracja w wp-config.php, na przykład:
 * define( 'WPPCLEANUP_FEED_LINKS', false );
 */
function wppoland_advanced_cleanup_head() {
	if ( ! defined( 'WPPCLEANUP_FEED_LINKS' ) || WPPCLEANUP_FEED_LINKS ) {
		remove_action( 'wp_head', 'feed_links', 2 );
		remove_action( 'wp_head', 'feed_links_extra', 3 );
	}
	if ( ! defined( 'WPPCLEANUP_RSD' ) || WPPCLEANUP_RSD ) {
		remove_action( 'wp_head', 'rsd_link' );
	}
	if ( ! defined( 'WPPCLEANUP_GENERATOR' ) || WPPCLEANUP_GENERATOR ) {
		remove_action( 'wp_head', 'wp_generator' );
		add_filter( 'the_generator', '__return_empty_string' );
	}
	if ( ! defined( 'WPPCLEANUP_EMOJIS' ) || WPPCLEANUP_EMOJIS ) {
		remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
		remove_action( 'wp_print_styles', 'print_emoji_styles' );
		remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
	}
	if ( ! defined( 'WPPCLEANUP_SHORTLINKS' ) || WPPCLEANUP_SHORTLINKS ) {
		remove_action( 'wp_head', 'wp_shortlink_wp_head', 10 );
		remove_action( 'template_redirect', 'wp_shortlink_header', 11 );
	}
}
add_action( 'init', 'wppoland_advanced_cleanup_head' );

Staging może wtedy zachować kanały, a produkcja je usunąć, bez dwóch wersji pliku wtyczki.

#Jak sprawdzić oczyszczony nagłówek w źródle strony

Po wdrożeniu otwórz publiczny URL w oknie prywatnym i sprawdź trzy warstwy.

  1. Źródło strony (Ctrl+U): wyszukaj EditURI, emoji, shortlink, generator i alternate. Od WordPress 6.9 ustawienia emoji stoją przed </body>, więc przeszukaj cały dokument, nie tylko head. Przestarzałych trafień ma nie być. Canonical, arkusze stylów i wymagane tagi wtyczek zostają.
  2. DevTools Network: filtruj po s.w.org i wp-emoji. Po czyszczeniu emoji nie powinno pojawić się żadne żądanie. Porównaj żądania z head przed zmianą i po niej na tym samym adresie URL.
  3. Nagłówki odpowiedzi: brak nagłówka Link z rel=shortlink i brak X-Pingback, jeśli go usunąłeś. Niektóre wtyczki bezpieczeństwa ustawiają własne nagłówki, tych to nie dotyczy.

Lista kontrolna do odbioru:

  • Testuj staging i produkcję osobno, wyczyść object cache i cache stron.
  • Sprawdź pojedynczy wpis, stronę archiwum i stronę główną (dodatkowe kanały zachowują się na każdej inaczej).
  • Sprawdź osobno stronę produktu WooCommerce: wtyczki często dodają tam tagi, które nie pochodzą z tego fragmentu kodu.
  • Otwórz raz edytor blokowy i zapisz wpis: REST API musi odpowiadać.
  • Opcjonalnie uruchom PageSpeed Insights albo WebPageTest i porównaj bajty HTML oraz domeny zewnętrzne. Spodziewaj się mniej szumu, nie nowego wyniku.

Jeśli po czyszczeniu skrypt emoji nadal się pojawia, sprawdź, która wtyczka go ładuje. remove_action na hookach rdzenia nie zatrzyma wtyczki, która dodaje własną kopię, więc czytaj źródło zamiast ufać fragmentowi kodu.

#Jak usunąć linki kanałów RSS z nagłówka WordPress

RSS nie umarł. Podcasty, importy newsletterów i narzędzia monitorujące nadal czytają /feed/. Kanały komentarzy i kanały poszczególnych taksonomii rzadko za to przynoszą ruch i zapełniają head na stronach archiwów.

Pragmatyczne poziomy:

  1. Tylko kanały komentarzy (feed_links_show_comments_feed zwraca false). Główny kanał zostaje.
  2. Dodatkowe kanały wyłączone (usuń feed_links_extra). Kategorie i tagi tracą autowykrywanie w head, a adresy kanałów działają dalej dla każdego, kto je zna.
  3. Wszystkie linki kanałów poza head (feed_links i feed_links_extra). Endpointy pozostają dostępne, znika tylko autowykrywanie.

Dla większości stron firmowych wystarczy poziom 1 albo 2. Poziom 3 tylko wtedy, gdy nikt nie subskrybuje kanału i robisz to celowo.

feed_links() nic nie wypisuje, jeśli motyw nie deklaruje add_theme_support( 'automatic-feed-links' ). Jeśli strona w ogóle nie pokazuje linków kanałów, sprawdź motyw, zanim dodasz kod usuwający.

#Jak zostawić główny kanał i usunąć tylko część dodatkowych

Usunięcie feed_links_extra działa na zasadzie wszystko albo nic. Rdzeń oferuje dokładniejsze przełączniki. feed_links_show_posts_feed i feed_links_show_comments_feed istnieją od WordPress 4.4. WordPress 6.1 dodał po jednym filtrze na każdy typ dodatkowego kanału: feed_links_extra_show_post_comments_feed, feed_links_extra_show_post_type_archive_feed, feed_links_extra_show_category_feed, feed_links_extra_show_tag_feed, feed_links_extra_show_tax_feed, feed_links_extra_show_author_feed i feed_links_extra_show_search_feed. Od 6.7 feed_links_args filtruje separator i tytuły linków kanałów.

// Zostaw kanał wpisów i kanały kategorii, usuń resztę dodatkowych.
add_filter( 'feed_links_show_comments_feed', '__return_false' );
add_filter( 'feed_links_extra_show_tag_feed', '__return_false' );
add_filter( 'feed_links_extra_show_author_feed', '__return_false' );
add_filter( 'feed_links_extra_show_search_feed', '__return_false' );

feed_links_extra_show_post_comments_feed przyjmuje jako wartość domyślną wartość feed_links_show_comments_feed, więc wyłączenie globalnego kanału komentarzy usuwa też link do kanału komentarzy pojedynczego wpisu, chyba że osobno zwrócisz dla niego true. Parametry wymienia wpis w dokumentacji dla feed_links_extra_show_category_feed.

#Jak ukryć wersję WordPressa w źródle strony

wp_generator zapisuje wersję rdzenia w HTML. To nie jest włamanie, ale skanery traktują priorytetowo wersje ze znanymi CVE. Usuń meta tag i opróżnij the_generator. Wersja wycieka też w innych miejscach:

  1. Query stringi zasobów: style i skrypty rdzenia mają ?ver= z wersją rdzenia, na przykład przy wp-emoji-release.min.js.
  2. readme.html: plik leży w katalogu głównym WordPressa (/readme.html), nie w wp-content, i każda aktualizacja rdzenia go przywraca. Zablokuj go na serwerze WWW, jeśli to dla Ciebie ważne.
  3. Wtyczki: wiele wtyczek wypisuje własną wersję w komentarzach albo w adresach zasobów.

Samo czyszczenie nagłówka nie jest programem bezpieczeństwa, usuwa jeden sygnał. CVE, których szuka skaner, zamyka aktualizacja rdzenia i wtyczek.

#Jak usunąć parametr ver z adresów CSS i JS

Filtry style_loader_src i script_loader_src dostają każdy URL dodanego zasobu, więc tam można usunąć argument ver:

function wppoland_remove_version_from_assets( $src ) {
	if ( $src && strpos( $src, 'ver=' ) !== false ) {
		$src = remove_query_arg( 'ver', $src );
	}
	return $src;
}
add_filter( 'style_loader_src', 'wppoland_remove_version_from_assets', 9999 );
add_filter( 'script_loader_src', 'wppoland_remove_version_from_assets', 9999 );

Ten parametr unieważnia też cache przeglądarki i CDN po aktualizacji. Bez niego zmieniony plik może być serwowany z cache pod tym samym adresem URL, więc zostaw ten filtr tylko wtedy, gdy Twój deploy albo CDN obsługuje unieważnianie cache w inny sposób.

#Czy rel prev i next nadal dają korzyści SEO

rel="prev" i rel="next" między pojedynczymi wpisami pomagały kiedyś przy seriach. Dla pojedynczych wpisów rdzeń nie wypisuje ich od 5.6, więc na aktualnej stronie pochodzą z motywu albo wtyczki SEO. Dla nowoczesnych crawlerów efekt jest pomijalny. Na stronach magazynowych z długimi łańcuchami artykułów możesz je zostawić, na stronach usługowych i w sklepach usuń je we wtyczce, która je dodaje. Więcej ważą linki wewnętrzne w treści i sensowne mapy witryny.

#Czyszczenie nagłówka przy WP Rocket i cache stron

Autoptimize, FlyingPress, WP Rocket i podobne narzędzia zmieniają kolejność i łączenie zasobów. Twój fragment z remove_action powinien działać przed cache HTML, czyli w PHP, a nie jako późniejsza zamiana tekstu w optymalizatorze. Jeśli optymalizator ponownie wstrzykuje skrypty emoji albo dopuszcza domeny zewnętrzne, sprawdź jego ustawienia.

Object cache nie przechowuje wyniku wp_head w sposób, który unieważniałby remove_action. Cache stron owszem: stare kopie HTML zachowują dodatkowe tagi, dopóki cache nie zostanie opróżniony. Wyczyszczenie cache po wdrożeniu jest obowiązkowe.

#Dlaczego remove_action w wp_head nie działa

Zły priorytet: remove_action( 'wp_head', 'feed_links' ) bez priorytetu 2 nie trafia w callback. Rdzeń rejestruje z priorytetem, a Twoje usunięcie musi mieć tę samą liczbę.

Za wczesny hook: jeśli wywołujesz remove_action na najwyższym poziomie pliku wtyczki, część callbacków nie jest jeszcze zarejestrowana. init albo wp_loaded są bezpieczniejsze niż kod na najwyższym poziomie.

Edytowany motyw nadrzędny: przychodzi aktualizacja, czyszczenie znika. Użyj motywu potomnego albo mu-pluginu.

REST usunięty z list kopiuj-wklej: edytor się psuje albo aplikacje headless nie znajdują /wp-json/. Listy z wątków forum z 2014 roku są ryzykowne bez sprawdzenia, porównaj je z tabelą w tym artykule.

Nieaktualne nazwy callbacków: linia celuje w funkcję, której rdzeń już nie podpina, jak w sekcji o liniach, które nic nie robią. Tag, który próbujesz usunąć, pochodzi wtedy z innego miejsca.

Testowany tylko frontend: panel administracyjny zachowuje zasoby emoji. Odwiedzający tego nie zauważą, redaktorzy na wolnych łączach owszem. Dołącz hooki panelu, jeśli zespół się zgadza.

#Podsumowanie

wp_head zbiera wynik rdzenia, motywu i wtyczek. Przestarzałe elementy (RSD, dodatkowe kanały, generator, zasoby emoji, shortlink) można usunąć przez remove_action i kilka filtrów. Wykrywanie REST, dodawane CSS i JS, title, robots, ikony i canonical zostają. Traktuj skrypt emoji i style emoji osobno i pamiętaj, że od 6.9 skrypt jest wypisywany w stopce. Usuń shortlink w HTML i w nagłówku HTTP, zostaw canonical. W aktualnych wersjach usuń linie dla wlwmanifest_link i linków sąsiednich wpisów. Logika należy do mu-pluginu, nie do motywu nadrzędnego. Weryfikacja to przeszukanie źródła, panel sieci i nagłówki odpowiedzi plus wyczyszczenie cache.

Źródła z Developer Handbook: wp_head, remove_action, feed_links, feed_links_extra, print_emoji_detection_script, wp_enqueue_emoji_styles, wp_shortlink_wp_head, wp_shortlink_header, wp_generator, rsd_link, wlwmanifest_link, rel_canonical, wp_headers.

Potrzebujesz pomocy we wdrożeniu tego na stagingu i produkcji? Specjalista WordPress przejdzie wp_head razem z resztą krytycznej ścieżki renderowania.

Następny krok

Przekuj artykuł w realne wdrożenie

Pod tym wpisem dokładam linki, które domykają intencję użytkownika i prowadzą dalej w strukturze serwisu.

Chcesz wdrożyć ten temat na swojej stronie?

Jeśli problemem są Core Web Vitals, wolny frontend albo ciężki WordPress, rozpiszę i wdrożę konkretny plan optymalizacji.

Sprawdź inne usługi WordPress i bazę wiedzy

Wzmocnij swój biznes dzięki profesjonalnemu wsparciu technicznemu w kluczowych obszarach ekosystemu WordPress.

Często zadawane pytania

Najważniejsze odpowiedzi, które pomagają wdrożyć temat w praktyce.

Ile trwa oczyszczenie nagłówka WordPress#
Około 20 minut, jeśli masz już dostęp do motywu potomnego, mu-pluginu albo functions.php. Najwięcej czasu zajmuje testowanie każdego wywołania remove_action i ponowne sprawdzanie źródła strony oraz nagłówków odpowiedzi.
Dla której wersji WordPressa są te fragmenty kodu#
Kod jest sprawdzony z WordPress 7.1.3. Działa od wersji 6.4, w której style emoji przeniesiono do wp_enqueue_emoji_styles. Filtry dla poszczególnych kanałów wymagają wersji 6.1 lub nowszej. wlwmanifest_link nie jest podpięty od 6.3, więc linia, która go usuwa, ma znaczenie tylko na starszych instalacjach.
Co może pójść źle przy usuwaniu domyślnych elementów wp_head#
Jeśli usuniesz feed_links, klienty podcastów i czytniki kanałów przestaną automatycznie wykrywać Twój RSS. Usunięcie linku wykrywania REST API może zdezorientować klientów headless i integracje. Usunięcie skryptów emoji zostawia bardzo stare przeglądarki bez obrazkowych zamienników emoji.

Potrzebujesz FAQ dopasowanego do branży i rynku? Przygotuję wersję pod Twoje cele biznesowe.

Porozmawiajmy

Polecane artykuły

Jak dodać Google Maps do WordPressa

Przestań używać iframe. Dowiedz się, jak poprawnie zintegrować Google Maps Platform API, obsłużyć zgody RODO, zoptymalizować Core Web Vitals i wybrać najlepszą wtyczkę lub implementację customową.