Georg Weidner
Lade Beitragsliste...
Neue Beiträge:

Style:   

Was ist und wie funktioniert eigentlich ein Web-Bug (Zählpixel)?

Woher wissen E-Mail-Versender eigentlich ob ich die E-Mail geöffnet habe oder nicht? Und warum sollte ich Spammails am besten ohne sie zu öffnen direkt löschen?
Die Antwort: Web-Bugs (auch Zählpixel genannt).

Web-Bugs sind 1×1 Pixel kleine, transparente Bilder welche z.B. in E-Mails oder auf Webseiten eingebaut werden. Öffnet ein User die E-Mail oder besucht er eine Webseite, wird das Web-Bug wie ein normales Bild geladen – bleibt für den Menschen aber unsichtbar.

Das tolle für den Marketer ist, dass er das Web-Bug von einem beliebigen Server einbinden kann – und immer wenn ein E-Mailprogramm oder ein Browser, etc. etwas von einem Server laden (hier das Web-Bug), darf der Server auf seine Cookies zugreifen (oder neue setzen). Auch erscheint der Aufruf natürlich in den Log-Files des Servers.

Auf die vielen Möglichkeiten die sich mit Cookies bieten möchte ich hier jetzt nicht weiter eingehen, denn auch sehr tolle Dinge kann man machen, wenn das Web-Bug auf dem Server gar kein echtes Bild ist, sondern z.B. ein php-Script.

Zur Veranschaulichung wollen wir uns jetzt ein Web-Bug bauen:


Voraussetzung für dieses sehr einfach Beispiel ist lediglich etwas Webspace mit installiertem mod_rewrite.

Erstellen wir also eine php-Datei mit folgendem Inhalt – das wird unser Web-Bug:

header("Content-Type: image/gif");
 
$width = 1;
$height = 1;
 
$id = ImageCreate($width,$height);
$black = ImageColorAllocate($id, 0, 0, 0);
$white = ImageColorAllocate($id, 255, 255, 255);
$trans = ImageColorTransparent($id, $white);
 
imagefill($id, 0,0, $white);
 
if (function_exists("imagegif"))
{
	Header("Content-type: image/gif");
	ImageGif($id);
}
else
	die("Keine Grafik-Unterstützung vorhanden");
 
ImageDestroy($id);

Das php-Script macht nun nichts anderes, als ein transparentes gif-Bild zu rendern und zurück zu geben.

Standardinformationen über den User lassen sich nun ganz einfach tracken, indem wir Abfragen wie folgende in das php-Script einbauen und die Informationen in unserer Datenbank speichern:

$time = time();
$ip = $_SERVER[REMOTE_ADDR];
$host = gethostbyaddr($ip);

Das wirklich interessante aber ist die Möglichkeit, dem Web-Bug weitere Informationen in Form von angehängten Parametern zu übergeben.
Der Aufruf sähe dann z.B. so aus: http://www.georg-weidner.de/webbug.php?userid=1234
Und ist in der php-Datei auslesbar mit:

$userid = $_REQUEST["userid"];

Baut man in jeder versendeten E-Mail ein Webbug mit einer eindeutigen ID ein, ist somit ganz einfach nachvollziehbar, wer die E-Mail geöffnet hat.

Jetzt fehlt nurnoch, dass wir unserem Server sagen er soll aus der php-Endung unserer Datei gif machen (damit es auch wie ein Bild aussieht).
Das geht ganz einfach mit z.B. mod_rewrite in der .htaccess-Datei:

<IfModule mod_rewrite.c> 
RewriteEngine on
RewriteRule webbug.gif$ webbug.php [PT]
</IfModule>

Nun können wir unser Web-Bug in E-Mails oder auf Webseiten einbauen:

<img src="http://www.georg-weidner.de/webbug.gif?userid=1234" border="0" width="1" height="1" />

Genutzt wird dieses Verfahren z.B. von der Informationsgemeinschaft zur Feststellung der Verbreitung von Werbeträgern (http://www.ivw.de), auf deren Seiten die aktuellen Klickzahlen der teilnehmenden Internet-Portale (eigentlich alle relevanten) abgefragt werden können.

Nun erklärt sich auch, warum z.B. Outlook nicht mehr automatisch alle Bilder lädt, die in E-Mails eingebaut sind, oder? ;)

Bei Fragen oder weiteren Anmerkungen nur keine Scheu! :)

Anmerkung: Dieses Verfahren ist für professionelle Anbieter natürlich viel zu unperformant und soll auch nur das grundsätzliche Vorgehen veranschaulichen.

8 Kommentare zu "Was ist und wie funktioniert eigentlich ein Web-Bug (Zählpixel)?"

hallo!
suuper artikel.
leider bin ich mit php nicht so bewandert.
ich bekomme das skript einfach nicht zum laufen.

in einem anderne forum habe ich folgenden code gefunden, welchen ich auch einbauen wollte, denn hier sollte ich eine email bekommen:

/* Deine Emailadresse*/
$mailad = “deine@email.de”;
header(‘Content-type: image/gif’);
header(‘Expires: Sat, 22 Apr 1978 02:19:00 GMT’);
header(‘Cache-Control: no-cache’);
header(‘Cache-Control: must-revalidate’);

printf(“%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%”,
71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59);
$ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
$mail = rawurldecode (“$QUERY_STRING”);
$time = strftime(“%d.%m.%Y um %H:%M:%S Uhr”, time());
$host = gethostbyaddr($ip);
$header = “Content-Type: text/plain; charset=”iso-8859-1″n”;
$header .= “X-Priority: 1n”;
$header .= “Content-Transfer-Encoding: 8bitn”;
$header .= “FROM: $mail@noreply.comn”;
$message .= “E m a i l I D : $mailnnGelesen ~> $timennUser ~~~> $ip – ( $host )nBrowser ~> $HTTP_USER_AGENTnReferrer ~> $HTTP_REFERERnn—”;
$mailto = $mailad;
mail(“$mailto”,”Email ID: $mail zugestellt!”,”$message”,”$header”);

rewrite funktioniert auf meinem server – was muß ich noch beachten?

vielleicht könntest du mir helfen – bin schon sehr verzweifelt.

lg

luke / 16. November 2009, 8:00

Hallo Luke,

was hast du denn genau vor?
Denn so wirklich Sinn macht es ja nicht, dass du dir bei jedem Klick auf deiner Webseite eine E-Mail schickst.
Schau dir doch mal lieber folgende Tools an:
http://www.woopra.com/
http://www.google.com/analytics/

Und als PHP-Counter (hier kannst du dir den Quelltext anschauen und lernen): http://www.chcounter.org/

Hoffe das hilft dir weiter?

Georg / 16. November 2009, 22:30

Hallo, wie sieht denn nun das fertige php-Script aus? Lege ich es einfach in den Ordner meines Webspaces?
Es funktioniert nicht bei mir.

Wie muss ich die Datenbank einrichten, wo die ausgelesenen Daten gespeichert werden?

Mit freundlichen Grüßen und Danke
Sveny

sveny / 19. Februar 2010, 12:34

Hey Sveny,

das was ich oben beschreibe ist weniger zum wirklichen Tracken geeignet – es zeigt nur ein mögliches Vorgehen aus technischer Sicht. So reicht es ja bei weitem nicht aus, die Daten zu sammeln – viel schwieriger ist es, die gesammelten Daten in der richtigen Art und Weise zu aggregieren und Relationen zu erstellen.

Von daher würde ich dir empfehlen, für das richtige Tracken zu fertigen Lösungen zu greifen – einige gute habe ich im o.g. Kommentar schon aufgezählt.

Wenn du allerdings nur verstehen willst, wie ein Web-Bug funktionieren kann, müsste der o.g. Code dir weiterhelfen.

Wenn du dazu noch weitere Fragen hast helf ich dir gern weiter.

Georg

Georg / 20. Februar 2010, 12:33

super artikel.

jetztz erklärt sich mir auch warum outlook immer die bilder block. nette sache von outlook.
wieder ein wenig schlauer :-) danke

gruß
squizzel

squizzel / 14. Juli 2010, 15:55

Hallo, gute Beschreibung hier. Funktioniert wunderbar.
Frage: wie bekomme ich einen referer in meine Statistik.
$_SERVER['HTTP_REFERER'] gibt immer die Seite von der ich komme, also meine domain und nicht den gewünschten referer.
Man könnte in angeben.
D.h mit Javascript und document.referrer.
aber wie?? oder gibts noch ne andere Lösung.
gruß

joe / 25. Januar 2011, 14:12

Hallo Joe,

wenn jemand 2x auf deiner Seite klickt, ist der Referrer auf der zweiten Seite zwangsläufig deine Seite. Eine Möglichkeit wäre hier, den Referrer nur zu erfassen, wenn er nicht von deiner Domain stammt.

Einen Hinweis noch: Von verschlüsselten Seiten (https) wirst du auch keinen Referrer sehen.

Beste Grüße,
Georg

Georg / 27. Januar 2011, 19:53

Hi Joe,
mit einem Session-Cookie kannst du die Benutzer auseinander halten und dementsprechend nachvollziehen, in welcher Reihenfolge deine Seiten besucht werden, so kannst du dir in den meisten Fällen das mitschreiben von HTTP_REFERER sparen.

Bernhard H. / 11. März 2011, 13:06

Was denkst du?

Suchen

Twitter