Wo platziert man das Werbeskript?

Es ist etwas schwierig, deine Punkte ohne Kontext zu beantworten. Es wäre sehr hilfreich, wenn du mehr Details dazu nennen könntest, welches Werbenetzwerk du meinst und genau, wie es bei dir nicht funktioniert hat.

Das ist nicht ganz richtig und hängt stark davon ab, welches Werbenetzwerk du verwenden möchtest. Wenn es eine strikte Anforderung ist, dass das Skript des Werbenetzwerks direkt neben dem </body>-Tag platziert werden muss – was unwahrscheinlich ist – dann liegt das Problem eindeutig beim Werbenetzwerk selbst, das solch eine strikte und unangemessene Anforderung stellt.

Skripte, die in einem Theme hinzugefügt werden, werden in eine theme.js-Datei eingebunden, die dann in das <head>-Tag des Dokuments injiziert wird.

Das gibt uns eine gewisse Kontrolle und ermöglicht es uns, nützliche Funktionen umzusetzen, wie zum Beispiel zu verhindern, dass defekte Themes die gesamte Seite lahmlegen.

Auch das ist nur teilweise richtig. Themes können auf der Client-Seite alles modifizieren. Das bedeutet, dass alles, was in JavaScript in Discourse geschrieben ist, für Themes zugänglich ist.

Tatsächlich könnte das gesamte offizielle Werbe-Plugin in eine Theme-Komponente umgewandelt werden, und es würde funktionieren. Das Einzige, was fehlen würde, ist die Möglichkeit, eine ads.txt-Datei hinzuzufügen, da dies Zugriff auf das Backend erfordert. Der Grund, warum wir das nicht getan haben, ist, dass ein Plugin eine sauberere Implementierung für diesen Zweck darstellt – vor allem, weil es mehr als einen Anbieter unterstützt. Also ja, Themes haben Einschränkungen, aber das ist hier nicht der Hauptpunkt.

Hier gibt es einen sehr wichtigen Hinweis: Discourse ist eine Single-Page-Applikation. Das bedeutet, dass nach dem initialen Laden der App auf der ersten Seite alle weiteren Navigationen von Discourse und nicht vom Browser verarbeitet werden.

Das ist wichtig zu wissen, denn ein Werbenetzwerk muss die notwendigen Hooks bereitstellen, damit Single-Page-Applikationen die Seiteninformationen aktualisieren und neue Anzeigen ausliefern können. Ich weiß nicht viel über Adbutler oder Openx, aber ich konnte keine Dokumentation für die Unterstützung von Single-Page-Applikationen durch einen dieser Anbieter finden.

Wenn das Werbenetzwerk also die notwendigen Hooks nicht bereitstellt, liegt es dann wirklich an Discourse, dass es nicht unterstützt wird?

Du wirst nicht wirklich gezwungen, DFP zu verwenden. Es ist nur eine von sechs Optionen im offiziellen Werbe-Plugin, die ich hier der Vollständigkeit halber aufliste:

  1. DFP
  2. AdSense
  3. Google Ads
  4. Amazon Advertising
  5. Codefund
  6. Carbon Ads

Wiederum: Da Discourse eine Single-Page-Applikation ist, funktioniert ein „generisches