Beschreibung
Hafenstudios Ads ist ein Anzeigen-Manager für WordPress: Platziere Werbebanner, AdSense-Einheiten und beliebigen Anzeigencode genau dort, wo du sie haben willst, rotiere sie, steuere wer sie sieht, und behalte Impressionen, Klicks und Klickrate im Blick — ohne dass Analysedaten an einen externen Server gehen.
Create multiple ad blocks, insert them automatically before or after the content, after paragraph N or by shortcode, widget and Gutenberg block. Weighted ad rotation, split testing, device and post-type targeting, campaign scheduling and consent gating are built in.
Highlights
- Zwei Anzeigen-Varianten im Split-Test gegeneinander laufen lassen: jede Variante mit Impressionen, Klicks und Klickrate, dazu eine Skala für den Datenfortschritt und eine Markierung bei der Variante, die vorn liegt.
- Gewichtete Anzeigen-Rotation, cache-fest: Blöcke mit gleichem Gruppennamen rotieren in automatischen Platzierungen und über
[adjet_ad_group name="header"]; der Gewinner wird im Browser der Besucher gewählt, ein Page-Cache kann die Auswahl also nicht einfrieren. - AdSense-Assistent: Publisher-ID und Slot-ID genügen für responsive AdSense-Einheiten, inklusive der Formate In-Article und Multiplex.
- Nichts verlässt deinen Server: keine externen Aufrufe, kein Nachhause-Telefonieren, die Statistik bleibt in deiner eigenen Datenbank.
- Vorlagen-Galerie mit 27 kostenlosen Vorlagen: Banner, Native-Karten, Testimonial, Buch-/Kurs-Karte, Saison-Deals, Events, Sponsoren-Logowand, Notification-Bars, Popups und ein Cookie-Consent-Banner mit auswählbaren Cookie-Bildern.
- Automatische Platzierungen vor dem Inhalt, nach dem Inhalt, nach Absatz N, in der Mitte des Inhalts, vor dem letzten Absatz, nach Überschrift N oder nach dem ersten Bild.
- Manuelle Platzierung per Shortcode
[adjet_ad id="1"], Widget oder Gutenberg-Block. - Aufgeräumtes, fokussiertes Backend mit Markenleiste, Wochenübersicht und klaren Navigationsreitern.
- Geräte-Targeting für Desktop, Tablet und Mobilgeräte.
- Beitragstyp-Targeting plus Ausschlüsse für Beiträge, Kategorien, Schlagwörter und eigene Taxonomien.
- Optionale Kennzeichnung „Anzeige“ mit anpassbarem Text.
- Lazy Loading über den IntersectionObserver.
- Consent-Cookie-Gating für gängige Consent-Tools.
- Optionale anonyme lokale Statistik für Impressionen und Klicks.
- Kampagnen-Zeitsteuerung mit optionalem Start- und Endzeitpunkt.
- Duplizieren sowie Pausieren und Aktivieren mit einem Klick, für schnelleres Arbeiten.
- Code-Editor und Live-Vorschau im Backend, die keine Skripte ausführt.
- AdSense-Assistent: Publisher-ID und Slot-ID genügen für responsive AdSense-Einheiten.
- Optionaler Loader für AdSense Auto Ads mit klaren Einstellungen.
- 30-Tage-Statistikdiagramm (Impressionen und Klicks), inline gerendert und ohne externe Bibliotheken.
- Wochenübersicht über der Anzeigenblock-Liste: Impressionen, Klicks und Klickrate seit Montag, verglichen mit demselben Wochentagszeitraum der Vorwoche.
- Sparsame Berechtigung
manage_adjetmit optionalem Schalter für Redakteurs-Zugriff. - Premium-Vorlagen und Premium-Funktionen schaltest du mit Pro frei.
- REST-API (
adjet/v1) für Anzeigenblöcke, Statistik und Einstellungen über Anwendungspasswörter. - Geführter Assistent mit optionalen KI-Textvorschlägen (mit deinem eigenen Anthropic-Claude-Key).
- Eingebaute Vorlage für einen Cookie-Consent-Banner mit Unterstützung für Google Consent Mode v2.
- Eingebautes Newsletter-Opt-in für SendFox, MailerLite, Brevo, Mailchimp und Kit (ConvertKit), mit eigenem Token und Double-Opt-in.
- Einstiegshilfe beim ersten Start, die dich zu AdSense, einer Vorlage oder deinem eigenen HTML führt.
- JSON-Import und -Export mit Prüfung von Dateigröße und Dateityp.
- Deinstallations-Routine, die deine Daten behält, sofern du die Löschung nicht ausdrücklich verlangst.
Datenschutz
Das Plugin kontaktiert weder aus dem WordPress-Backend noch im Frontend Server von hafenstudios. Die optionale Statistik wird lokal in deiner eigenen WordPress-Datenbank gespeichert. Anzeigencode von Dritten, den du in einen Anzeigenblock einfügst, kann externe Dienste kontaktieren — richte deine Consent-Lösung entsprechend ein.
Externe Dienste
Das Plugin funktioniert vollständig ohne jeden externen Dienst. Jede der folgenden Anbindungen ist optional und läuft nur, wenn du sie ausdrücklich aktivierst:
- Google AdSense (Frontend): Wenn du eine AdSense-Anzeigeneinheit einrichtest oder Auto Ads aktivierst, lädt das Frontend Googles
adsbygoogle.jsvonpagead2.googlesyndication.com, um Anzeigen auszuspielen. Nutzungsbedingungen: https://www.google.com/adsense/localized-terms — Datenschutz: https://policies.google.com/privacy - Anthropic Claude (nur im Backend, eigener Key): Die optionalen KI-Buttons senden Daten an die Anthropic-API (
api.anthropic.com), jeder erst, nachdem du deinen eigenen Anthropic-API-Key in den Einstellungen eingetragen und genau diesen Button geklickt hast; kein Key, keine Anfrage, nie automatisch. Was die einzelnen Buttons senden: Der Button „KI-Vorschläge“ im Anzeigen-Assistenten sendet die Feldnamen der Vorlage, deinen Website-Namen samt Beschreibung und deinen getippten Hinweis, um Textentwürfe für die Anzeige zu erzeugen; der Button „Alt-Text vorschlagen“ sendet das ausgewählte Anzeigenbild (aus deiner Mediathek als kodierte Bilddaten, sonst als URL), damit es beschrieben wird; der Button „Die KI auf die Zahlen schauen lassen“ auf der Statistik-Seite sendet aggregierte Tages- und Wochensummen sowie Impressionen und Klicks je Block. Besucherdaten, IP-Adressen oder E-Mail-Adressen werden nie gesendet. Der Key wird verschlüsselt gespeichert und ausschließlich serverseitig verwendet. Nutzungsbedingungen: https://www.anthropic.com/legal/commercial-terms. Datenschutz: https://www.anthropic.com/legal/privacy - SendFox (eigener Token): Wenn du SendFox in den Einstellungen verbindest und die Vorlage „Newsletter (SendFox)“ nutzt, werden die E-Mail-Adressen, die Besucher über dieses Formular abschicken, an die SendFox-API (
api.sendfox.com) gesendet und in deine Liste eingetragen. Das passiert nur, wenn du einen SendFox-Access-Token hinterlegt hast. Der Token wird verschlüsselt gespeichert und ausschließlich serverseitig verwendet. Nutzungsbedingungen: https://sendfox.com/tos — Datenschutz: https://sendfox.com/privacy - MailerLite (eigener Token): Wenn du MailerLite in den Einstellungen verbindest und die Vorlage „Newsletter (MailerLite)“ nutzt, werden die E-Mail-Adressen, die Besucher über dieses Formular abschicken, an die MailerLite-API (
connect.mailerlite.com) gesendet und in deine Gruppe eingetragen. Das passiert nur, wenn du einen MailerLite-API-Token hinterlegt hast. Der Token wird verschlüsselt gespeichert und ausschließlich serverseitig verwendet. Nutzungsbedingungen: https://www.mailerlite.com/legal/terms-of-service — Datenschutz: https://www.mailerlite.com/legal/privacy-policy - Brevo (eigener Token): Wenn du Brevo in den Einstellungen verbindest und die Vorlage „Newsletter (Brevo)“ nutzt, werden die E-Mail-Adressen, die Besucher über dieses Formular abschicken, an die Brevo-API (
api.brevo.com) gesendet. Sind in den Einstellungen eine Double-Opt-in-Vorlage und eine Weiterleitungs-URL hinterlegt, läuft die Anmeldung über Brevos Double-Opt-in-Endpunkt (/contacts/doubleOptinConfirmation) und Brevo verschickt die Bestätigungsmail; ohne diese Angaben wird der Kontakt direkt angelegt und es geht keine Bestätigungsmail raus, was die Erfolgsmeldung des Formulars auch ehrlich so sagt. Das passiert nur, wenn du einen Brevo-API-Key hinterlegt hast. Der Key wird verschlüsselt gespeichert und ausschließlich serverseitig verwendet. Nutzungsbedingungen: https://www.brevo.com/legal/termsofuse/. Datenschutz: https://www.brevo.com/legal/privacypolicy/ - Mailchimp (eigener Token): Wenn du Mailchimp in den Einstellungen verbindest und die Vorlage „Newsletter (Mailchimp)“ nutzt, werden die E-Mail-Adressen, die Besucher über dieses Formular abschicken, an die Mailchimp-API (
<dc>.api.mailchimp.com, das Rechenzentrum steckt in deinem API-Key) gesendet und mit Status „pending“ in deine Audience eingetragen — das löst Mailchimps Double-Opt-in aus. Das passiert nur, wenn du einen Mailchimp-API-Key hinterlegt hast. Der Key wird verschlüsselt gespeichert und ausschließlich serverseitig verwendet. Nutzungsbedingungen: https://mailchimp.com/legal/terms/ — Datenschutz: https://www.intuit.com/privacy/statement/ - Kit, früher ConvertKit (eigener Token): Wenn du Kit in den Einstellungen verbindest und die Vorlage „Newsletter (Kit)“ nutzt, werden die E-Mail-Adressen, die Besucher über dieses Formular abschicken, an die Kit-API (
api.kit.com) gesendet, um den Kontakt anzulegen oder zu aktualisieren und ihn dem von dir gewählten Kit-Formular hinzuzufügen; ist für dieses Formular Double-Opt-in aktiviert, verschickt Kit seine Bestätigungsmail. Das passiert nur, wenn du einen Kit-v4-API-Key hinterlegt hast. Der Key wird verschlüsselt gespeichert und ausschließlich serverseitig verwendet. Nutzungsbedingungen: https://kit.com/terms. Datenschutz: https://kit.com/privacy
Sicherheit
Das Plugin nutzt Berechtigungsprüfungen, Nonces für Formularaktionen, Bereinigung beim Speichern und Escaping bei der Ausgabe. Roher Anzeigencode wird nur für Nutzer mit der Berechtigung unfiltered_html unverändert gespeichert.
Lokalisierung
- Quellsprache: Englisch.
- Enthaltene Übersetzungen: Deutsch, Spanisch, Französisch und Niederländisch — vollständig und im Plugin mitgeliefert.
Support
Dieses Plugin wird von hafenstudios entwickelt und gepflegt. Für direkten Support erreichst du uns per E-Mail unter moin@hafenstudios.com oder telefonisch unter +49 174 3935796. Du kannst auch gerne das Plugin-Supportforum auf WordPress.org nutzen.
Screenshots







Blöcke
Dieses Plugin bietet 1 Block.
- Hafenstudios Ads
Installation
- Lade die ZIP-Datei über Plugins > Installieren > Plugin hochladen hoch.
- Aktiviere das Plugin.
- Öffne das neue Menü „Hafenstudios Ads“ und lege deinen ersten Anzeigenblock an.
- Optional: Anzeigen-Kennzeichnung, Consent-Cookie-Einstellungen und lokale Statistik konfigurieren.
Du wechselst von „AdEngine – Free Ad Inserter & Manager“? Installiere einfach dieses Plugin — deine Anzeigenblöcke, Einstellungen und Statistiken werden beim ersten Laden automatisch übernommen.
FAQ
-
Funktioniert dieses Plugin mit AdSense?
-
Ja. Du kannst entweder originalen AdSense-Code als eigenen Code einfügen oder den AdSense-Assistenten mit deiner Publisher-ID und Slot-ID nutzen. Das Plugin erzeugt dann eine responsive Anzeigeneinheit und lädt das AdSense-Skript im Frontend, wenn es gebraucht wird.
-
Kann ich es manuell einsetzen?
-
Ja. Nutze den Shortcode
[adjet_ad id="1"], den Shortcode[adjet_ad_group name="header"], das mitgelieferte Widget oder den Gutenberg-Block. -
Ersetzt es ein Consent-Tool?
-
Nein. Das Plugin kann auf ein konfiguriertes Consent-Cookie warten, liefert aber weder Rechtsberatung noch einen Cookie-Banner.
-
Trackt dieses Plugin Nutzer extern?
-
Nein. Die optionale Statistik speichert anonyme, aggregierte Zählwerte lokal in deiner WordPress-Datenbank.
-
Sendet die KI-Funktion Daten irgendwohin?
-
Nur wenn du sie nutzt. Die KI ist die eine bewusste Ausnahme von „keine externen Aufrufe“: Sie läuft erst, wenn du deinen eigenen Anthropic-API-Key hinterlegt und einen Button geklickt hast, ein Klick, eine Anfrage, nie automatisch. Je nach Button enthält die Anfrage die Feldnamen der Vorlage, deinen Website-Namen samt Beschreibung, deinen getippten Hinweis, das ausgewählte Anzeigenbild (Alt-Text-Vorschlag) oder aggregierte Statistik-Summen (Statistik-Zusammenfassung). Besucherdaten, IP-Adressen, E-Mail-Adressen oder Seiteninhalte werden nie gesendet, und dein Key wird verschlüsselt gespeichert und verlässt deinen Server nie.
-
Können Redakteure Anzeigen verwalten, ohne Administrator zu sein?
-
Ja. Aktiviere „Redakteurs-Zugriff“ in den Einstellungen, um der Redakteurs-Rolle die Berechtigung
manage_adjetzu geben. Administratoren haben immer Zugriff. -
Was passiert mit meinen Daten, wenn ich das Plugin deinstalliere?
-
Es wird nichts gelöscht, solange du es nicht verlangst. Die Einstellung „Beim Deinstallieren alle Daten löschen“ ist standardmäßig aus. Entfernst du das Plugin, bleiben deine Anzeigenblöcke, Einstellungen und die Statistik-Tabelle also erhalten, und eine spätere Neuinstallation greift sie wieder auf. Schalte die Einstellung vor dem Deinstallieren ein, wenn Optionen, Statistik-Tabelle und die Berechtigung
manage_adjetendgültig verschwinden sollen. -
Gibt es eine REST-API?
-
Ja. Der Namensraum
adjet/v1stellt Anzeigenblöcke (/blocks, CRUD), Statistik (/stats) und Einstellungen (/settings) bereit. Die Authentifizierung läuft über ein Anwendungspasswort; der Zugriff setzt die Berechtigungmanage_adjetvoraus.
Rezensionen
Mitwirkende und Entwickler
„Hafenstudios Ads – Anzeigen-Manager, AdSense & Werbebanner“ ist Open-Source-Software. Folgende Menschen haben an diesem Plugin mitgewirkt:
Mitwirkende„Hafenstudios Ads – Anzeigen-Manager, AdSense & Werbebanner“ wurde in 1 Sprache übersetzt. Danke an die Übersetzer für ihre Mitwirkung.
Übersetze „Hafenstudios Ads – Anzeigen-Manager, AdSense & Werbebanner“ in deine Sprache.
Interessiert an der Entwicklung?
Durchstöbere den Code, sieh dir das SVN-Repository an oder abonniere das Entwicklungsprotokoll per RSS.
Änderungsprotokoll
2.5.0
- Behoben: Die Vorlagen sprechen jetzt die Sprache deiner Website. Der Schließen-Button, der Screenreader-Name des Consent-Banners und der E-Mail-Platzhalter standen auf Deutsch im Markup, deshalb zeigte eine französische Website trotz sieben mitgelieferter Übersetzungen eine deutsche Beispieladresse in ihrem Anmeldeformular.
- Neu: Overlays lassen sich per Tastatur bedienen. Escape schließt ein Popup- oder Exit-Overlay, der Fokus bleibt darin, solange es offen ist, und kehrt danach dorthin zurück, wo er herkam. Beide werden als Dialog angekündigt. Der Consent-Banner ist bewusst ausgenommen: Eine Einwilligungs-Entscheidung darf nicht aus Versehen weggeklickt werden.
- Neu: Klick-Schutz. Das Plugin deckelt, wie oft ein Browser deine Anzeigen anklicken kann: ab Werk höchstens 3 Klicks auf denselben Block und 10 insgesamt je Besucher und 24 Stunden, beides einstellbar. Über dem Limit wird der Klick entweder nicht mehr gezählt oder der Block bleibt für diesen Besucher weg, deine Entscheidung. Die Statistik zeigt, wie viele Klicks der Schutz nicht gezählt hat, damit es nie nach einem Zählfehler aussieht.
- Über deine Besucher wird dafür nichts gespeichert: keine IP-Adresse, weder im Klartext noch anders, nur ein gekürzter und gesalzener Hash, höchstens 24 Stunden lang, in deiner eigenen Installation. Es geht nichts nach außen, es wird keine Liste bekannter Bots von außen geholt, und die Entscheidung fällt beim Zählen des Klicks, Page-Caches bekommen davon also nichts mit. Beim Deinstallieren gehen diese Daten ohnehin mit.
- Behoben: Zwei ältere Statistik-Helfer haben Besucheradressen ohne Salt gehasht. Sie nutzen jetzt denselben gesalzenen, gekürzten Hash wie alles andere.
- Die freie Fassung zeigt den internen Arbeitsnamen nirgends mehr in der Oberfläche.
- Neu: ein Schalter „Keine automatischen Anzeigen auf diesem Beitrag“ direkt im Editor, in der Seitenleiste oder als Metabox. Er nimmt nur die automatischen Platzierungen weg: Shortcode, Widget und Block bleiben, weil die jemand mit Absicht gesetzt hat.
- Neu: Mit WooCommerce kannst du jetzt Produktseiten und die Shop-Seite direkt ansteuern. Warenkorb und Kasse bleiben werbefrei, bis du sie selbst anhakst, auch bei Blöcken, die sonst überall laufen.
- Neu: zwei Schalter unter „Erweitert“ für jede Anzeige mit Link. „Als Werbung kennzeichnen“ (rel=“sponsored nofollow“) ist standardmäßig an, weil Google das für bezahlte Links verlangt, und „In neuem Tab öffnen“ ergänzt immer rel=“noopener“.
- Neu: Für einen leeren AdSense-Slot kann jetzt eine ganze Rotationsgruppe einspringen, nicht nur eine einzelne Anzeige. Der Browser wählt die Variante, gezählt wird genau eine.
- Neu: Je Anzeige wählst du, was passiert, wenn ein Adblocker sie verhindert: still einen anderen Block zeigen statt gar nichts. Keine Aufforderung, den Adblocker abzuschalten, und die Voreinstellung bleibt „Nichts zeigen“.
- Neu: Die Anzeigenliste ist sortierbar. Klick auf Name, Status, Platzierung, Impressionen, Klicks oder Klickrate, um die Tabelle zu ordnen, und noch einmal, um die Richtung zu drehen. Ausgangspunkt sind immer die Impressionen absteigend, und die Auswahl wird nie gemerkt. Namen mit Umlaut oder Akzent stehen dort, wo du sie suchst.
- Ersatzanzeigen folgen denselben Regeln wie jede andere Anzeige: Zeitsteuerung, Geräteauswahl und „Nur eingeloggte Nutzer“ gelten auch für sie, eine abgelaufene Kampagne läuft also nicht länger als Ersatz weiter. Ein Skript in einer Ersatzanzeige läuft nach dem Tausch wirklich.
- Verbessert: Bei Platzierungen im Inhalt bietet der Editor nur noch die Seitentypen an, die dort überhaupt greifen. Keine Checkboxen mehr, die nichts bewirken.
- Verbessert: Die Diagnose-Ansicht (?adjet_debug=1) erklärt jetzt auch die neuen Fälle: den Schalter je Beitrag, Warenkorb und Kasse, und warum kein Ersatz gezeigt werden konnte.
- Verbessert: Consent-Banner bleiben aus dem Anzeigen-Ranking heraus, und die Skala für den Datenfortschritt im Split-Test sagt „Datenhürde erreicht“ statt „442 der 100 Impressionen, die sie braucht“.
- Hinweis: Bestehende Anzeigen behalten ihren Anzeigencode unverändert, die beiden Link-Schalter greifen also, sobald du die Anzeige speicherst. Der Assistent sagt das, sobald du ihn öffnest.
- Neu: fremde Skripte wie Tracking-Pixel zurückhalten, bis deine Besucher eingewilligt haben. Jede Regel schreibst du selbst, jede startet im Probelauf und protokolliert zunächst nur, was sie blockieren würde. Scharf schaltest du jede Regel einzeln. Skripte deiner eigenen Domain und WordPress-Kernskripte bleiben ausgenommen, und eine Notbremse gibt alles wieder frei.
- Neu: eine Consent-Ampel auf dem Dashboard. Sie sagt dir, wenn Anzeigen ohne Banner laufen oder wenn es zwar einen Banner gibt, aber Consent Mode v2 fehlt, und ein Button daneben legt den Banner aus der Vorlage an.
- Neu: Einwilligungs-Quellen. Das Plugin kann Entscheidungen mit der WP Consent API austauschen und die Signale eines IAB-TCF-2.x-Banners übernehmen, damit ein Banner, den du ohnehin betreibst, wie der eingebaute zählt.
- Neu für fortgeschrittene Einrichtungen, standardmäßig aus: „Google-Tags vorladen“ (Advanced Consent Mode). Der Schalter geht nur zusammen mit einer ausdrücklichen Bestätigung an und trägt einen klaren Hinweis auf § 25 TDDDG. Nur reine Google-Tags laden früher; jedes andere einwilligungspflichtige Skript wartet weiter.
- Consent-Banner: Der Ablehnen-Button ist jetzt genauso prominent wie der Zustimmen-Button, gleiche Größe, gleiches Gewicht, nur die Farbe unterscheidet sich. Bereits gespeicherte Banner werden ebenfalls korrigiert.
- Consent-Banner: optionale Einblend-Animation (bei reduzierter Bewegung automatisch aus), vier mitgelieferte Cookie-Bilder und vier Textvorschläge von knapp bis elegant.
- Das Skript für den Consent-Grundzustand kann von Optimierungs-Plugins nicht mehr hinter deine Tracking-Tags geschoben werden, und eine neue Prüfung meldet es, wenn trotzdem ein anderes Snippet zuerst lädt.
- Ohne JavaScript verschwindet der Consent-Banner jetzt, statt unbedienbar stehen zu bleiben.
- Overlays: Die Einstellung zur Frequenz (einmal pro Sitzung, einmal pro Tag) gehört jetzt zur freien Fassung.
- Blöcke mit einem gespeicherten Pro-Auslöser scheitern nicht mehr stillschweigend: Die Blockliste und der Editor sagen jetzt, dass stattdessen der Standard-Auslöser der Vorlage gilt.
- Das Kurzdatum in der Statistik richtet sich jetzt nach der Sprache deiner Website; vorher stand dort immer das deutsche Format.
2.4.1
- Aufgeräumte Plugin-Seiten: Werbe- und Hinweisbanner anderer Plugins (etwa von Sicherheits- oder Shop-Plugins) erscheinen nicht mehr mitten in den Verwaltungsseiten des Plugins, weder über dem Formular noch in den Einstellungen oder auf der Split-Test-Seite. Die eigenen Meldungen des Plugins wie „Gespeichert“ bleiben natürlich sichtbar. Alle anderen WordPress-Verwaltungsseiten bleiben unangetastet.
- URL-Felder im Assistenten und in den Einstellungen akzeptieren jetzt relative Pfade (z. B. /privacy/) und „#“. Vorher hat der Browser das Speichern stillschweigend blockiert, sogar beim eigenen Standardwert der Consent-Vorlage. Blockiert ein ungültiges Feld doch einmal das Absenden, erscheint jetzt ein roter Hinweis direkt unter dem Feld und die Seite scrollt dorthin. Die Aktiv-Checkbox des Cookie-Consent-Banners heißt jetzt „Banner aktiv schalten“ statt „Anzeige sofort ausspielen (aktiv)“.
- Vorlagen-Galerie: Die 38 Vorlagen-Karten lassen sich jetzt filtern. Eine Chip-Leiste mit allen Kategorien (dynamisch aus dem Katalog gesammelt, „Alle“ vorausgewählt), eine Live-Suche über Name und Beschreibung sowie ein Chip „Nur Free“. Alle Filter lassen sich kombinieren, laufen vollständig im Browser und sind barrierefrei (die Chips sind echte Buttons mit aria-pressed); ohne Treffer erscheint ein freundlicher Hinweis statt einer leeren Wand.
- Aufgeräumt: Das Anzeigen-CSS (rund 3 KB) lädt nur noch, wenn deine Installation überhaupt etwas ausspielen kann. Seiten einer Installation ohne einen einzigen aktiven Block, ohne Auto Ads und außerhalb der Diagnose-Ansicht überspringen es vollständig. Schneller: Lädt AdSense ohne Consent-Gate, verbindet sich der Browser jetzt vorab mit Googles Anzeigenserver (preconnect + dns-prefetch), damit Anzeigen früher erscheinen; hinter einem Consent-Banner bleibt der frühe Google-Kontakt bewusst aus. Schlanker: Interne Verwaltungsoptionen reisen nicht mehr bei jedem Seitenaufruf mit (autoload aus, mit einer automatischen einmaligen Migration für bestehende Installationen). In Pro zusätzlich: Die Empfehlungskarte und die Produktbox blenden leere Bildplatzhalter jetzt genauso aus wie die anderen Vorlagen.
2.4.0
- Sechs neue Vorlagen, alle kostenlos: eine Testimonial-Anzeige, eine In-Feed-Native-Karte für Beitragslisten, eine Buch-/Kurs-Karte mit Sternebewertung und Preisnotiz, ein Saison-Deal-Banner (Black Friday, Weihnachten, Ostern, Sommer) mit Gutscheincode zum Kopieren und optionalem Countdown, eine Event-Ankündigung, die sich nach dem Start selbst ausblendet, und eine Sponsoren-Logowand. Alle nutzen die Assistenten-Felder, die Mediathek-Auswahl und das Datumsfeld; leere optionale Bilder, Codes und Timer werden automatisch ausgeblendet.
- Neu: ads.txt. Trag deine ads.txt-Zeilen in die Einstellungen ein, dann liefert das Plugin sie unter /ads.txt aus (eine echte Datei im Web-Root gewinnt immer). Ein Vorschlag für die Zeile wird aus deiner AdSense-Publisher-ID gebaut. AdSense warnt in deinem Konto, wenn die ads.txt fehlt; jetzt ist sie ein Textfeld.
- Neu: Platz reservieren gegen Layout-Sprünge. Jeder Block kann eine Mindesthöhe reservieren, bevor die Anzeige lädt, und der AdSense-Assistent schlägt die üblichen Höhen je Format vor. Lazy Loading kostet dich damit keine Core Web Vitals mehr.
- Neu: Anzeigen ohne Einwilligung, deine Entscheidung. Eine AdSense-Einstellung liefert nicht-personalisierte Anzeigen aus, solange die Einwilligung fehlt oder abgelehnt wurde (Googles NPA-Flag, Consent Mode v2 bleibt, wie er ist). Standardmäßig aus; der Text der Einstellung sagt, was das in der EU bedeutet.
- Neu: Ersatz für leere AdSense-Slots. Wähle einen anderen Block, der erscheint, wenn Google den Slot nicht füllt; der Tausch passiert im Browser, sobald AdSense das meldet.
- Neu: Anzeigen-Skripte bei der ersten Interaktion laden (Scrollen, Tippen, Tastendruck, spätestens nach 5 Sekunden). Standardmäßig aus.
- Neu: Seitentyp-Targeting für Overlays, manuelle Platzierungen und In-Feed-Anzeigen: Startseite, Blog-Übersicht, Archive, Suche, 404, Autorenseiten. Leer heißt wie bisher überall.
- Neu: Sichtbarkeit nach Login-Status und Rolle. „Alle“, „Nur ausgeloggte Besucher“ oder „Nur eingeloggte Nutzer“, dazu eine Liste von Rollen, für die der Block ausgeblendet wird. Der alte Schalter „nur ausgeloggt“ wird übernommen.
- Neu: drei Positionen im Inhalt, in der Mitte des Inhalts, vor dem letzten Absatz und nach Überschrift N.
- Neu: Option „Mitlaufend“ für manuelle Platzierungen (Widget, Shortcode, Block): Die Anzeige behält ihre Position, während der Besucher scrollt, mit einstellbarem Abstand nach oben.
- Neu: „Warum erscheint die Anzeige hier nicht?“ Ruf als eingeloggter Nutzer eine beliebige Seite deiner Website mit ?adjet_debug=1 auf: Überall, wo ein Block nicht erscheint, siehst du (und nur du) einen Hinweis mit dem ersten Grund: Beitragstyp, Seitentyp, Zeitsteuerung, Wortzahl, Consent, Gerät und so weiter. Nichts davon erreicht Besucher oder Page-Caches.
- Neu: Statistik-Export als CSV (semikolongetrennt, Excel-freundlich) für den gewählten Zeitraum.
- Neu: Import aus Ad Inserter und Advanced Ads auf der Seite „Import / Export“. Blöcke, Namen und Platzierungen werden übernommen; Regeln ohne Entsprechung werden nach dem Import aufgelistet; alles kommt pausiert an; ein zweiter Import legt keine Duplikate an.
2.3.2
- Neu: Bilder aus der Mediathek wählen. Das Bildfeld der Vorlage „Bild-Banner“ bekommt einen Button „Aus der Mediathek wählen“ mit Vorschaubild und Entfernen-Link; das URL-Feld bleibt für externe Bilder, und der Alt-Text aus der Mediathek füllt das Alt-Feld, solange es leer ist. Angeregt durch das Video-Review von WordPress 103.
- Neu: echte Datumsfelder. Das Zieldatum des Countdowns ist jetzt ein Datums- und Zeitfeld statt eines Textfelds mit Formathinweis, und die Zeitsteuerung (Start und Ende) gibt es jetzt auch im Vorlagen-Assistenten unter „Erweitert“, samt ausgeschriebener Zeitzone der Website; das Ende lässt sich nicht mehr vor den Start legen. Gespeicherte Werte behalten ihr Format, bestehende Anzeigen bleiben unberührt.
- Neu: mehr Gestaltung, ohne die Vorlage zu verlassen. Unter „Erweitert“ liegen im Assistenten jetzt Ausrichtung, maximale Breite, Abstand und ein optionales Feld „Eigenes CSS“, dessen Selektoren automatisch auf genau diesen einen Block begrenzt werden, Media Queries eingeschlossen, damit sich sonst nichts auf der Website ändert. Dieselben Felder gibt es im vollen Editor.
- Geändert: der Weg von einer Vorlage zu deinem eigenen HTML. Der alte Link „HTML selbst bearbeiten“ hat die Vorlage samt ihren Feldern endgültig verworfen. Jetzt ist es eine sichtbare Karte, die eine Kopie der Anzeige im HTML-Editor öffnet (bei AdSense im Experten-Editor); die Vorlagen-Anzeige bleibt genau so, wie sie ist, und die Kopie startet pausiert. Der Kopfbereich des Assistenten sagt das vorab.
- Geändert: Die Ausrichtung „Links“ und „Rechts“ schiebt jetzt auch das zentrierte Wurzelelement einer Vorlage auf diese Seite; vorher hat sie nur die Textausrichtung darin verändert.
- Behoben: Das Abzeichen „Empfohlen“ auf der Karte des AdSense-Assistenten steckte als deutsches Wort fest im Stylesheet und erschien deshalb auf jeder Website auf Deutsch. Es ist jetzt übersetzbares Markup und in allen sieben mitgelieferten Sprachen übersetzt.
- Aufräumen: Das Changelog war über die 5.000 Wörter hinausgewachsen, die WordPress.org anzeigt. Einträge bis 2.1.1 sind in die changelog.txt im Plugin-Ordner umgezogen.
2.3.1
- Behoben: Der Cookie-Consent-Banner blitzte bei jedem Seitenaufruf auf, auch bei Besuchern, die längst entschieden hatten. Das Banner-Markup geht absichtlich mit jeder Seite raus (ein Page-Cache liefert allen dasselbe HTML, der Server kann das Cookie also nicht kennen), und frontend.js entfernt es im Browser. Der Ausgangszustand war allerdings verkehrt herum: Das Banner trägt ein inline gesetztes display:flex und steht weit vor dem Skript, das es wegnimmt (auf einem Live-Shop gemessen: Banner bei 69 % des Dokuments, frontend.js bei 94 %, ohne defer, dazwischen rund 100 KB HTML und mehrere Hundert KB Skripte). Hafenstudios Ads schreibt jetzt ganz oben im Head ein winziges Inline-Snippet, das das Banner sofort ausblendet, wenn bereits eine Entscheidung gespeichert ist. Das Banner selbst bleibt bewusst standardmäßig sichtbar: Es in der Vorlage zu verstecken und per Skript einzublenden, sähe kürzer aus, aber frontend.js liegt unter plugins/hafenstudios-ads/, und Werbeblocker sperren diesen Pfad zuverlässig. Das Banner würde also ausgerechnet den Besuchern nie erscheinen, denen Datenschutz am wichtigsten ist, und sie hätten überhaupt keine Möglichkeit einzuwilligen.
- Behoben: Das Aufblitzen traf auch Installationen, die die Consent-Vorlage gar nicht nutzen. Ein Banner kann genauso gut als reiner HTML-Block laufen: einmal aus der Vorlage kopiert, seitdem von Hand gepflegt, oder in mehreren Fassungen, die im Split-Test gegeneinander laufen. Hafenstudios Ads erkennt Banner-Markup jetzt auch im Block-Code, deshalb bekommen diese Installationen die Korrektur ebenfalls.
2.3.0
- Behoben, und das hier verändert deine Zahlen: Für Overlays, die niemand gesehen hat, werden keine Impressionen mehr gebucht. Die Sichtbarkeitsprüfung fiel bisher auf den unsichtbaren Wrapper des Blocks mit Höhe null zurück, sobald Overlay-Code mit einem style-Tag beginnt. In 2.1.x buchte das Tausende Impressionen für Popups, die sich nie geöffnet haben; seit 2.2.0 buchte es gar keine mehr, auch bei geöffneten Popups, weshalb Overlay-Blöcke mehr Klicks als Impressionen zeigen konnten. Der Observer findet jetzt das fixierte Overlay-Element selbst und zählt nie ein Ziel ohne sichtbare Fläche. Rechne damit, dass die Impressionszahlen von Overlays dort sinken, wo es Phantomzahlen waren, und dort zurückkommen, wo sie verschwunden waren; ab jetzt bedeuten sie „das Overlay war tatsächlich auf dem Bildschirm“.
- Behoben: Ein Klick in das E-Mail-Feld eines Opt-in-Formulars, das Korrigieren eines Tippfehlers oder das Schließen eines Popups zählt nicht mehr als Anzeigen-Klick. Es zählen nur Links, Buttons und Absende-Elemente, und höchstens ein Klick je Block und Seitenaufruf. Opt-in-Blöcke kamen auf diesem Weg auf eine „Klickrate“ über 100 Prozent; rechne mit sinkenden Klickzahlen und einer Quote, die etwas aussagt.
- Behoben: Ein Split-Test weiß jetzt, wann er begonnen hat. Jede Rotationsgruppe bekommt an dem Tag ein Startdatum, an dem sie entsteht, und die Split-Test-Seite zählt ab diesem Tag, nie früher. Zahlen, die ein Block gesammelt hat, bevor er zur Variante wurde, verzerren den Vergleich damit nicht mehr. Bereits bestehende Tests bekommen beim ersten Öffnen der Seite das heutige Datum, und die Seite nennt das Datum, ab dem sie zählt.
- Sicherheitsnetz für Rotationsgruppen: Eine unentschiedene Gruppe kann auf keinem Weg mehr eine Impression buchen; es zählt nur die Variante, die der Browser gewählt hat.
- Neu auf der Split-Test-Seite: eine Skala für den Datenfortschritt. Die Nadel zeigt, wie viele Daten der Test gesammelt hat, gemessen an der schwächsten laufenden Variante gegen die Schwelle von 100 Impressionen. Die Konfidenzzonen bleiben ausgegraut und verschlossen; ob der Vorsprung belastbar ist, rechnet Hafenstudios Ads Pro aus, und die freie Fassung weigert sich weiterhin, eine Signifikanz zu behaupten, die sie nicht prüfen kann.
- Geändert: Consent-Banner sind aus der Anzeigen-Statistik in einen eigenen Bereich „System“ auf der Anzeigenliste und der Statistik-Seite umgezogen, mit den Spalten „Entscheidungen“ und „Entscheidungsquote“. Ein Banner wird beantwortet, nicht geklickt: Seine „Klickrate“ von 27 Prozent war eine Zustimmungsquote mit falschem Etikett, und als einziger seitenweiter Block beherrschte er jede Summe. Die Wochenübersicht und der Top-Block zählen jetzt nur noch echte Anzeigen. Die freie Fassung zählt Zustimmen und Ablehnen als dieselbe Entscheidung; die tatsächliche Zustimmungsquote bleibt Teil der Consent-Statistik von Pro.
- Neu: eine ehrliche Warnung bei Overlay-Blöcken, die nie erscheinen können. Eigener Overlay-Code, der versteckt startet und keinen der freien Trigger trägt, lief bisher wochenlang unsichtbar, ohne ein Wort. Die Blockliste und der Editor sagen es jetzt, samt den beiden Attributen (data-adjet-popup, data-adjet-exit), die das beheben. Popup- und Exit-Vorlagen behalten ihr Trigger-Attribut am Wurzelelement, auch über „HTML selbst bearbeiten“.
- Neu: eine Frequenzgrenze für Overlays, im Browser des Besuchers pro Tag gemerkt. Ein Popup oder Exit-Overlay erscheint höchstens einmal am Tag, und ein geschlossenes Overlay, Leisten eingeschlossen, bleibt den Rest des Tages weg. Der Schließen-Button funktioniert jetzt auch in Overlays aus eigenem Code.
- Neu: zwei Karten im Momente-System. Wenn zwei oder mehr aktive Blöcke dieselbe Platzierung ohne Rotationsgruppe belegen, lässt ein Klick sie gegeneinander antreten, und mehr braucht es für einen Split-Test nicht. Und wenn der ausgewertete Test genug Daten gesammelt hat, nennt eine Karte die führende Variante, den Abstand und das, was der Pro-Autopilot jetzt tun würde.
- Behoben für Google Consent Mode v2: Solange der eingebaute Consent-Banner aktiv ist, wird der Consent-Grundzustand (denied) jetzt früh im Head ausgegeben, vor jedem gtag.js, und eine bereits gespeicherte Entscheidung wird bei jedem Seitenaufruf wieder eingespielt. Bisher war das einzige Signal das Update, das die Buttons des Banners auslösen: GA4 lief ab dem Seitenaufruf ungebremst, Googles Tag Assistant meldete das Update als vor dem Grundzustand eingetroffen, und die Entscheidung eines Besuchers hielt genau einen Seitenaufruf.
- Brevo-Anmeldungen können jetzt Brevos echtes Double-Opt-in nutzen: Hinterlege in den Einstellungen die ID einer Brevo-Double-Opt-in-Vorlage samt Weiterleitungs-URL, dann laufen Anmeldungen über Brevos DOI-Ablauf, Bestätigungsmail inklusive. Ohne diese Felder wird der Kontakt direkt angelegt, genau wie bisher, aber das Formular antwortet jetzt „Du bist eingetragen.“ statt eine Bestätigungsmail zu versprechen, die es nie gab. Beide Wege behalten die Regel aus 2.2.0, dass die Antwort nie verrät, ob eine Adresse schon auf deiner Liste steht.
2.2.0
- Neu: eine Seite „Split-Tests“, die eine deiner Rotationsgruppen als A/B-Test liest. Anzeigenblöcke mit gleichem Gruppennamen rotieren und zählen schon länger je Block, aber nirgends konntest du die Varianten nebeneinander sehen. Die Seite listet jede Variante der Gruppe mit Status, Gewichtung, Impressionen, Klicks und Klickrate und markiert die Variante, die vorn liegt. Es wird nichts Neues gemessen, nichts irgendwohin gesendet, und kein API-Key irgendeiner Art ist im Spiel.
- „Führt gerade“ erscheint erst, wenn zwei laufende Varianten im gewählten Zeitraum je mindestens 100 Impressionen haben und ihre Quoten sich tatsächlich unterscheiden. Eine Variante über der Schwelle, während die andere drei Impressionen hat, nennt niemanden, und ein Gleichstand ebenso wenig. Die Größe des Vorsprungs steht in Prozentpunkten darunter, weil ein Vorsprung von einem einzigen Klick sonst genauso aussieht wie einer von fünf Punkten. Ob dieser Vorsprung hält, ist eine Frage der Signifikanz, und die beantwortet Pro, zusammen mit dem Uplift, der Gewinnerübernahme mit einem Klick und einem KI-Vorschlag für die nächste Variante.
- Eine Gruppe gilt als Test, wenn ihre Blöcke denselben Gruppennamen UND dieselbe Platzierung haben. So funktioniert die Rotation: In automatischen Platzierungen wechseln sich nur Blöcke mit derselben Platzierung ab, alles andere erscheint gleichzeitig auf der Seite. Zwei Blöcke einer Gruppe in verschiedenen Platzierungen konkurrieren deshalb nicht, und sie als Varianten nebeneinanderzustellen würde Positionen vergleichen statt Varianten. Der Shortcode
[adjet_ad_group name="header"]ist davon nicht betroffen, er rotiert die ganze Gruppe, und diese Blöcke tragen alle die Platzierung „manuell“. - Du kannst wie immer so viele Rotationsgruppen betreiben, wie du willst. Eine davon wird auf der Seite ausgewertet, und du wählst sie mit einem einzigen Klick. Ohne Auswahl ist es der Test, den du zuerst angelegt hast, und der kann dir beim Umbenennen einer Gruppe nicht unter den Füßen wegrutschen.
- Rotationsgruppen, die einen Cookie-Banner enthalten, werden gezeigt, aber nicht bewertet: Die Buttons des Banners setzen ein Cookie, statt als Klick zu zählen, seine Klickrate würde einen völlig guten Banner also zum Verlierer erklären. Die Seite sagt das, statt so zu tun, als wäre es anders.
- Pausierte Varianten bleiben mit ihren Zahlen in der Gruppe, eine Pause löscht also nicht den halben Test aus der Ansicht. Die Markierung „Führt gerade“ bekommen sie aber nicht: Eine Variante, die nicht ausgeliefert wird, läuft gegen nichts an, und ihre Zahlen stehen still, während die anderen weiterzählen.
- Geändert, bitte lies das hier: Eine Adresse, die schon auf deiner Newsletter-Liste steht, bekommt jetzt genau dieselbe Bestätigung wie eine ganz neue. Bisher gab das Formular die Antwort deines Newsletter-Anbieters Wort für Wort aus, und diese Antwort sagt laut, ob eine Adresse bereits Mitglied ist. Jeder hätte nacheinander Adressen in dein Formular tippen und ablesen können, wer auf deiner Liste steht. Das Formular unterscheidet die beiden Fälle jetzt gar nicht mehr, und mehr verrät ein Anbieter mit Double-Opt-in nach außen auch nicht. Was dich das kostet: Wer sich vertippt und dabei die Adresse einer anderen Person trifft, liest weiterhin „bitte bestätige deine Anmeldung“. Die Meldung bedeutet jetzt „wir haben das an deinen Anbieter übergeben“, nicht „diese Adresse ist neu“.
- Behoben: Das Anmeldeformular zeigt kein einziges Wort mehr, das dein Newsletter-Anbieter geschrieben hat. Was SendFox, MailerLite, Brevo, Mailchimp oder Kit antwortet, bleibt auf deinem Server. Besucher lesen deinen eigenen Satz in der Sprache deiner Website statt einer englischen Entwicklermeldung wie „is already a list member. Use PUT to insert or update list members.“
- Behoben: Verbindungsprobleme stellen Besuchern keine technischen Details mehr vor die Nase. Eine fehlgeschlagene Abfrage zeigte bisher den cURL-Fehler und den Hostnamen deines Anbieters im Formular.
- Geändert: Dieselbe neutrale Antwort deckt jede Ablehnung ab, die dein Anbieter zu einer Einsendung zurückmeldet, nicht nur die zwei Statuscodes, die Mailchimp zufällig für eine Dublette nutzt. Eine Regel, die allein 400 und 422 neutralisiert, reißt dieselbe Lücke an dem Tag wieder auf, an dem ein Anbieter „already a member“ mit 409 beantwortet. Der bewusste Preis: Eine wirklich kaputte Einrichtung, etwa ein Pflicht-Merge-Feld, das dein Formular nicht mitschickt, oder eine beim Anbieter gelöschte Liste, sieht von vorn jetzt ebenfalls wie ein Erfolg aus. Deshalb landet jeder dieser Fälle im unten beschriebenen Protokoll und erscheint als Warnung in der Übersicht der Anzeigenblöcke. Drosselung durch deinen Anbieter (429), ein Ausfall beim Anbieter und ein abgelehnter Token bleiben Fehler, weil keiner davon von der eingegebenen Adresse abhängt.
- Behoben: Der Statuscode des Anmelde-Endpunkts sagt jetzt, was tatsächlich passiert ist. Alles, was der Anbieter zu einer Einsendung antwortet, ist eine normale 200. Es gibt drei Fehlerzustände, und sie bedeuten, was sie sagen: 503 der Anbieter hat geantwortet, kann gerade aber nicht zustellen, 502 die Anfrage hat den Anbieter überhaupt nicht erreicht, und 500 in deiner eigenen Einrichtung stimmt etwas nicht (kein Token, keine Liste gewählt, Token abgelehnt), und das löst sich durch Warten nicht von selbst. Wenn du 502-Antworten überwachst: Sie werden fast verschwinden.
- Neu: Die Übersicht der Anzeigenblöcke zeigt die letzte Anmeldung, die nicht durchgegangen ist, mit Datum, Anbieter, Statuscode und den eigenen Worten des Anbieters. Dorthin ist das Detail gewandert, das Besucher nicht mehr sehen, damit eine kaputte Verbindung nicht hinter einer freundlichen Bestätigung verborgen bleibt. E-Mail-Adressen sind in dieser Meldung maskiert. Der Fall der Dublette steht dort bewusst nicht: Er ist kein Fehler, sondern das Häufigste, was einem öffentlichen Formular passiert, und er würde den seltenen Konfigurationsfehler aus diesem einen Platz verdrängen.
- Behoben: Bei Kit konnte eine bereits bekannte Adresse die Anmeldung auf halbem Weg beenden. Kit erfährt zuerst vom Kontakt und erst dann vom Formular, und erst dieser zweite Schritt verschickt die Bestätigungsmail. Eine bekannte Adresse stoppte den ersten Schritt, der Besucher bekam also einen Fehler und keine Mail. Beide Schritte laufen jetzt, und ein echtes Problem im ersten Schritt landet im Protokoll, statt zu verschwinden. Kits eigene Formulierung kommt dort ebenfalls an: Kit nennt seine Gründe in einem Feld, das das Plugin nicht gelesen hat, deshalb wurde bisher jedes Kit-Problem als nackter Statuscode protokolliert.
- Behoben für Brevo: Eine Anmeldung mit einer Adresse, die Brevo schon kannte, hat diese Person stillschweigend in die von dir eingestellte Liste eingetragen, auch jemanden, der sich aus genau dieser Liste abgemeldet hatte, und Brevo verschickt bei diesem Schritt keine Bestätigungsmail. Das Plugin aktualisiert bestehende Kontakte nicht mehr. Neue Kontakte werden wie bisher angelegt, und eine bekannte Adresse beantwortet Brevo mit einem Fehler, der gegenüber dem Besucher als Erfolg zählt, für ihn ändert sich also nichts.
- Behoben: die Antwort auf den Honeypot. Eine Einsendung, die das versteckte Anti-Bot-Feld abgefangen hat, wurde mit einem leicht anderen Body beantwortet als eine echte Anmeldung, dadurch ließ sich die Falle mit einer einzigen Anfrage erkennen. Beide Antworten sind jetzt Byte für Byte identisch.
- Behoben: Die drei Ersatztexte des Anmeldeformulars („Danke!“, „Da ist etwas schiefgelaufen.“, „Verbindung fehlgeschlagen. Bitte versuche es später erneut.“) steckten fest in der JavaScript-Datei und ließen sich nie übersetzen. Sie kommen jetzt vom Server und sind übersetzt wie jeder andere Text.
Ältere Einträge (2.1.1 und früher) stehen in der changelog.txt im Plugin-Ordner.
