Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung WordPress 30.09.2026 · 11 min Lesezeit

WordPress-Heartbeat-API steuern: Intervall verlängern und Serverlast senken

Die Heartbeat-API von WordPress sendet im Block-Editor alle 10 Sekunden eine Anfrage an admin-ajax.php. Diese Anleitung zeigt, wie Sie das messen und per Must-Use-Plugin ein Mindestintervall setzen, ohne Beitragssperre und Autosave zu verlieren.

Mit KI erstellt – redaktionelle Prüfung ausstehend

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Mehr dazu

Grafik mit der Überschrift Heartbeat-API gezielt drosseln und einem stilisierten WordPress-Adminbereich mit Intervall-Einstellung

Solange ein Browser-Tab mit dem WordPress-Backend offen ist, schickt WordPress in festen Abständen Anfragen an /wp-admin/admin-ajax.php. Diese Heartbeat-API meldet ablaufende Sitzungen, sperrt Beiträge gegen gleichzeitiges Bearbeiten und unterstützt das automatische Speichern. Jede dieser Anfragen startet PHP und lädt WordPress vollständig. Auf kleinen Hosting-Paketen mit begrenzten PHP-Prozessen oder CPU-Kontingent fällt das auf, besonders wenn mehrere Redakteure den Editor stundenlang offen lassen. Diese Anleitung zeigt, wie Sie messen, wie oft Heartbeat bei Ihnen feuert, und wie Sie das Intervall mit einem kleinen Must-Use-Plugin gezielt verlängern, ohne Autosave und Beitragssperre zu verlieren. Alle Werte stammen aus einer Testinstanz mit WordPress 7.1.2.

Voraussetzungen

  • WordPress: eine aktuelle Version, getestet mit 7.1.2. Den Filter heartbeat_settings gibt es seit WordPress 3.6.
  • PHP: die von WordPress empfohlene Version, mindestens 7.4. Der Code unten nutzt nur Sprachmittel, die ab PHP 7.4 verfügbar sind.
  • Zugriff: SFTP, FTP oder SSH auf das Verzeichnis wp-content. Ohne Dateizugriff bleibt nur der Weg über ein Plugin (Schritt 5).
  • Rolle: ein Konto mit der Rolle Administrator für die Kontrolle im Backend.
  • Browser: ein Desktop-Browser mit Entwicklerwerkzeugen (Taste F12) für die Messung.
  • Backup: eine aktuelle Sicherung von Dateien und Datenbank. Ein Tippfehler in einem Must-Use-Plugin legt die Website lahm.
  • Testumgebung: empfohlen, besonders wenn Plugins wie Seitenbaukästen, Shop-Erweiterungen oder Live-Chats Heartbeat selbst nutzen. Wie Sie eine Kopie aufsetzen, zeigt die Anleitung WordPress-Staging-Umgebung mit WP-CLI einrichten.

Schritt 1: Verstehen, was Heartbeat tut und wann es läuft

Laut Entwicklerhandbuch richtet der Heartbeat-Code im Browser einen Takt ein, den „Tick“. Bei jedem Tick sammelt er Daten, schickt sie per POST an admin-ajax.php mit dem Parameter action=heartbeat und verarbeitet die JSON-Antwort. WordPress selbst hängt daran drei Funktionen:

  • Sitzungsprüfung: Läuft Ihre Anmeldung ab, blendet WordPress ein Anmeldefenster ein, statt ungespeicherte Arbeit zu verwerfen. Das Skript wp-auth-check hängt von Heartbeat ab.
  • Beitragssperre: Öffnen zwei Personen denselben Beitrag, sieht die zweite einen Hinweis, dass jemand anderes gerade bearbeitet. Laut Quelltext laufen diese Sperren nach 150 Sekunden ohne Rückmeldung ab.
  • Nonce-Erneuerung und Autosave: Heartbeat erneuert abgelaufene Sicherheitstoken und transportiert im klassischen Editor die automatische Zwischenspeicherung.

Die Taktung ist nicht fest. Aus dem Quelltext von wp-includes/js/heartbeat.js in WordPress 7.1.2 ergibt sich:

SituationIntervall
Standard im Backend60 Sekunden
Beitragseditor und Schnellbearbeitung10 Sekunden (per wp.heartbeat.interval( 10 ))
Modus „fast“5 Sekunden für höchstens 30 Ticks
Tab im Hintergrund120 Sekunden
10 Minuten ohne Maus oder Tastaturpausiert, außer im Beitragseditor
60 Minuten ohne Aktivitätpausiert immer

Der Editor schaltet die Pause bei Inaktivität ab ("suspension":"disable"), damit die Sperre bestehen bleibt. Genau das macht den Editor zur Hauptlastquelle: Ein vergessener Tab im Vordergrund sendet bis zu 60 Minuten lang alle 10 Sekunden eine Anfrage.

Verifizieren: Prüfen Sie mit wp core version oder unter Dashboard > Aktualisierungen Ihre WordPress-Version. Die Tabelle gilt für 7.1.2; bei deutlich älteren Versionen weichen die Werte ab.

Schritt 2: Heartbeat im Browser messen

Messen Sie vor jeder Änderung den Ist-Zustand, damit Sie die Wirkung später belegen können.

  1. Melden Sie sich an und öffnen Sie Beiträge > Beitrag hinzufügen.
  2. Öffnen Sie die Entwicklerwerkzeuge (F12) und wechseln Sie auf den Reiter Netzwerk. Tragen Sie in das Filterfeld admin-ajax ein.
  3. Warten Sie eine Minute, ohne den Tab zu wechseln. Jede Zeile ist eine Anfrage. In der Anfrage-Nutzlast steht action=heartbeat und screen_id.
  4. Wechseln Sie auf den Reiter Konsole und fragen Sie das aktuelle Intervall ab:
wp.heartbeat.interval()

Die Funktion gibt das aktuelle Intervall in Sekunden zurück, ohne es zu verändern. In unserer Testinstanz lieferte sie im Dashboard 60 und im Block-Editor 10. In 65 Sekunden im Editor zählten wir 6 Heartbeat-Anfragen. Die Einstellungen, die WordPress an den Browser übergibt, zeigt:

JSON.stringify(heartbeatSettings)

Im Editor lautete die Ausgabe {"nonce":"…","suspension":"disable"}, im Dashboard nur der Nonce. Die Nutzlast einer Dashboard-Anfrage sah so aus:

interval=60&_nonce=189de0336d&action=heartbeat&screen_id=dashboard&has_focus=true

Im Zugriffsprotokoll des Webservers steht action=heartbeat nicht, weil die Daten per POST kommen. Zählen Sie dort alle POST-Anfragen an admin-ajax.php; den Pfad nennt Ihr Hoster:

grep -c 'POST /wp-admin/admin-ajax.php' /pfad/zum/access.log

Verifizieren: Sie kennen die Zahl der Heartbeat-Anfragen pro Minute im Editor und im Dashboard. Liegt sie im Dashboard deutlich über einer pro Minute, beschleunigt ein Plugin Heartbeat oder nutzt admin-ajax.php für eigene Zwecke. Deaktivieren Sie in der Testumgebung verdächtige Plugins einzeln und messen Sie erneut.

Schritt 3: Must-Use-Plugin mit Mindestintervall anlegen

Ein Must-Use-Plugin ist eine PHP-Datei im Ordner wp-content/mu-plugins. WordPress lädt sie automatisch, sie lässt sich im Backend nicht versehentlich deaktivieren und überlebt Theme-Wechsel. Laut Handbuch liest WordPress dort nur Dateien direkt im Ordner, keine Unterordner. Code in der functions.php des Themes ginge beim nächsten Theme-Update verloren.

Legen Sie den Ordner an, falls er fehlt, und erstellen Sie die Datei wp-content/mu-plugins/heartbeat-steuerung.php:

<?php
/**
 * Plugin Name: Heartbeat-Steuerung
 * Description: Verlängert das Heartbeat-Intervall im Backend.
 */

add_filter( 'heartbeat_settings', function ( $settings ) {
	$settings['interval']        = 120; // Startwert in Sekunden (1 bis 3600).
	$settings['minimalInterval'] = 60;  // Untergrenze, auch für den Editor (höchstens 600).
	return $settings;
} );

Warum zwei Werte? interval legt nur den Startwert fest. Der Editor ruft danach selbst wp.heartbeat.interval( 10 ) auf und überschreibt ihn. minimalInterval dagegen ist laut Quelltext eine Untergrenze, die alle kürzeren Intervalle übersteuert und sich nach dem Laden nicht mehr ändern lässt. Das bestätigte unser Test: Mit dem Plugin zeigte heartbeatSettings im Editor "interval":"120","minimalInterval":60, und wp.heartbeat.interval() lieferte 60 statt 10.

Der Quelltext warnt ausdrücklich, dass Werte über 120 Sekunden Funktionen wie die Beitragssperre einschränken oder abschalten. Da Sperren nach 150 Sekunden verfallen, halten wir 60 Sekunden für einen vertretbaren Kompromiss, wenn mehrere Personen redaktionell arbeiten. Arbeitet nur eine Person im Backend, können Sie bis 120 Sekunden gehen.

Prüfen Sie die Datei vor dem Hochladen auf Syntaxfehler, wenn Sie SSH haben:

php -l wp-content/mu-plugins/heartbeat-steuerung.php

Verifizieren: php -l meldet No syntax errors detected. Unter Plugins > Installierte Plugins erscheint der Reiter „Unverzichtbar“ mit „Heartbeat-Steuerung“. Per WP-CLI zeigt wp plugin list --status=must-use die Zeile heartbeat-steuerung must-use. Im Editor liefert wp.heartbeat.interval() jetzt 60.

Schritt 4: Heartbeat außerhalb des Editors abschalten (optional)

Im Dashboard, in Beitragslisten und auf Einstellungsseiten bringt Heartbeat wenig: Hier gibt es keine Sperren und kein Autosave. Sie können das Skript dort abmelden. Ergänzen Sie die Datei aus Schritt 3 um diesen Block:

add_action( 'admin_enqueue_scripts', function ( $hook ) {
	if ( ! in_array( $hook, array( 'post.php', 'post-new.php' ), true ) ) {
		wp_deregister_script( 'heartbeat' );
	}
}, 1 );

Der Parameter $hook enthält die aufgerufene Backend-Seite. Nur auf post.php (Bearbeiten) und post-new.php (Neu erstellen) bleibt Heartbeat aktiv. Die Priorität 1 sorgt dafür, dass die Abmeldung vor anderen Plugins greift.

Der Trade-off: Mit Heartbeat entfällt auf diesen Seiten auch wp-auth-check, weil es davon abhängt. In unserem Test lud das Dashboard ohne den Block heartbeat.min.js und wp-auth-check.min.js, mit dem Block keines von beiden. Läuft Ihre Sitzung auf einer Einstellungsseite ab, merken Sie das erst beim Speichern und müssen sich neu anmelden; die Eingaben dieser Seite sind dann meist verloren.

Im Frontend lädt WordPress Heartbeat nicht von sich aus. In unserer Testinstanz mit Standard-Theme enthielt die Startseite auch für angemeldete Administratoren kein Heartbeat-Skript. Taucht es bei Ihnen im Frontend auf, bindet es ein Plugin oder das Theme ein; dann ist das der richtige Ansatzpunkt.

Verifizieren: Öffnen Sie das Dashboard, dann in der Konsole typeof wp.heartbeat. Erwartet ist "undefined". Im Beitragseditor liefert wp.heartbeat.interval() weiterhin 60. Öffnen Sie denselben Beitrag in einem zweiten Browser mit einem anderen Konto: Der Sperrhinweis muss erscheinen.

Schritt 5: Plugin statt eigenem Code abwägen

Ohne Dateizugriff ist ein Plugin der einzige Weg. Das bekannteste ist Heartbeat Control von WP Media. Es erlaubt Regeln getrennt für Dashboard, Frontend und Beitragseditor. In der Testinstanz legte es seine Seite als Unterpunkt unter Einstellungen an. Beachten Sie den Stand auf wordpress.org am 30.09.2026: Version 2.0.1, letzte Aktualisierung am 31.08.2023, getestet bis WordPress 6.3.12. Ein Plugin, das seit drei Jahren kein Update erhalten hat, ist ein Wartungsrisiko; wie Sie solche Fälle bewerten, beschreibt die Anleitung Veraltete und aufgegebene WordPress-Plugins erkennen und ersetzen.

Mit Dateizugriff empfehlen wir die rund 15 Zeilen aus Schritt 3 und 4: nachvollziehbar und ohne Drittanbieter. Manche Performance-Plugins bringen eine eigene Heartbeat-Einstellung mit; nutzen Sie nur eine Stelle.

Verifizieren: Suchen Sie unter Plugins > Installierte Plugins nach „heartbeat“ und prüfen Sie in den Einstellungen Ihres Caching-Plugins, ob dort bereits eine Heartbeat-Regel aktiv ist. Es darf nur eine Regel geben.

Schritt 6: Wirkung nachmessen und dokumentieren

Wiederholen Sie die Messung aus Schritt 2 unter denselben Bedingungen: gleicher Bildschirm, Tab im Vordergrund, gleiche Dauer. In unserer Testinstanz ergab sich:

BildschirmVorherNachher
Block-Editor, Intervall10 Sekunden60 Sekunden
Block-Editor, Anfragen6 in 65 Sekunden2 in 130 Sekunden
Dashboardalle 60 Sekundenkeine (mit Schritt 4)

Halten Sie die Werte mit Datum fest. Nach größeren Updates lohnt eine Kontrollmessung, weil neue Versionen die Standardwerte ändern können. Bleibt die Serverlast trotz ruhigem Heartbeat hoch, liegt die Ursache woanders, häufig bei WP-Cron: Die Anleitung WP-Cron durch echten System-Cron ersetzen zeigt den nächsten Hebel.

Solche Kontrollmessungen nach Updates sind Teil der laufenden Pflege. Wer diese Aufgaben nicht selbst im Kalender halten möchte, kann sie abgeben: Die WordPress-Wartung von wordpressupdate.de spielt Updates von WordPress, Plugins und Themes innerhalb von 48 Stunden mit Kompatibilitätsprüfung ein, sichert die Website wöchentlich auf externen Speicher und richtet die Firewall ein.

Verifizieren: Die Zahl der Heartbeat-Anfragen im Editor ist auf etwa eine pro Minute gesunken, Sperrhinweis und Autosave funktionieren, und die Messwerte sind dokumentiert.

Typische Fehler

  • Nur interval gesetzt, Editor bleibt bei 10 Sekunden: Der Editor überschreibt den Startwert. Erst minimalInterval wirkt als Untergrenze. Genau dieses Verhalten zeigte unser Test.
  • Werte außerhalb des Bereichs: interval klemmt WordPress auf 1 bis 3600 Sekunden. Ein minimalInterval über 600 verwirft der Code und setzt es auf 0, also ohne Untergrenze.
  • Datei in einem Unterordner von mu-plugins: WordPress lädt sie nicht. Die Datei muss direkt im Ordner liegen.
  • Weiße Seite oder „Es gab einen kritischen Fehler auf dieser Website.“: meist ein Syntaxfehler im Must-Use-Plugin, zum Beispiel ein fehlendes Semikolon oder typografische Anführungszeichen aus einem Textprogramm. Benennen Sie die Datei per SFTP um, dann lädt WordPress sie nicht mehr. Weitere Schritte beschreibt WordPress-Update-Fehler beheben: weiße Seite und kritischer Fehler.
  • Heartbeat komplett abgeschaltet: Wer wp_deregister_script( 'heartbeat' ) ohne Ausnahme für den Editor einsetzt, verliert Beitragssperren und Sitzungswarnungen. Zwei Personen überschreiben dann unbemerkt die Änderungen der anderen.
  • Anfragen ohne Anmeldung: Im Test antwortete admin-ajax.php auf action=heartbeat ohne Anmeldung mit {"wp-auth-check":false,"server_time":…}. Das ist normal und keine Sicherheitslücke. Massenhafte Anfragen von fremden Adressen sind ein Fall für die Firewall.

Häufige Fragen

Macht ein längeres Intervall meine Website für Besucher schneller?

Nicht direkt. Heartbeat läuft im Backend, Besucher laden es in der Regel nicht. Die Entlastung wirkt indirekt: Weniger PHP-Prozesse für das Backend bedeuten mehr freie Prozesse für Seitenaufrufe. Spürbar ist das vor allem auf kleinen Hosting-Paketen und bei mehreren gleichzeitig angemeldeten Redakteuren.

Geht beim längeren Intervall das automatische Speichern verloren?

Nein. Das Autosave-Intervall ist eine eigene Einstellung, die Konstante AUTOSAVE_INTERVAL steht standardmäßig auf 60 Sekunden. Im Test blieb der Wert im Editor mit Plugin bei "autosaveInterval":60. Mit einem Mindestintervall von 60 Sekunden passen beide Takte zusammen.

Wie mache ich die Änderung rückgängig?

Löschen oder benennen Sie die Datei heartbeat-steuerung.php um. Das Must-Use-Plugin speichert nichts in der Datenbank, beim nächsten Seitenaufruf gelten wieder die Standardwerte.

Testumfang

Wir haben in einer Laborinstanz mit WordPress 7.1.2 gemessen, wie sich Intervalle und Anfragen mit und ohne Must-Use-Plugin verhalten. Geprüft haben wir das im Dashboard, in der Beitragsliste und im Block-Editor.

Multisite und nginx haben wir nicht getestet, ebenso wenig die Serverlast im echten Redaktionsbetrieb. Probieren Sie die Änderung deshalb zuerst auf einer Kopie Ihrer Seite aus.

Fazit

Heartbeat ist nützlich, aber im Editor mit 10 Sekunden für viele kleine Websites zu häufig. Mit minimalInterval in einem Must-Use-Plugin senken Sie die Anfragen im Editor auf etwa ein Sechstel, ohne Beitragssperre, Autosave und Sitzungswarnung aufzugeben. Das Abschalten außerhalb des Editors ist eine bewusste Abwägung gegen die Sitzungswarnung. Messen Sie vorher und nachher, und wiederholen Sie die Messung nach größeren Updates. Wenn Sie diese Kontrolle zusammen mit Updates und Backups abgeben möchten, übernimmt das die dort genannte WordPress-Wartung.

Weiterführende Anleitungen und Quellen

Quellen:

WordPressHeartbeat APIPerformanceadmin-ajax.phpMust-Use-Plugin