Since this tip might come in handy for many others out there, I decided to write this little tutorial in English. Since I am not a native speaker, I apologize for my poor language. If you have any questions to this tutorial, feel free to add a comment. I’ll reply back!

So you are using VirtueMart on Joomla and you are using the SEF-extension sh404SEF? It is said to be the best SEF-Tool for VirtueMart. I can’t judge that, since I haven’t tried other plugins for this use-case. But this plugin is to some extend a little tricky. Especially, as I found out, when you are using the virtuemart-category-IDs on URLs.

The problem

First of all: What is this all about?

Basically, the SEF-Tool switches nasty url-strings like index.php?option=com_virtuemart&Itemid=7&category_id=205&flypage=flypage.tpl&lang=de&page=shop.product_details&product_id=3024 to nicer ones, which read like: my_shop_category/product_sku/product_name.html Search engines like that kind of URLs better that those unreadable gibberish strings.

If you are using sub-categories on virtuemart, you might think about adding the IDs to the URLs. You would do that, if you had sub-categories with identical name under different parent-categories. Sub-cCategory-URLs including their IDs help search engines to know, that those are different. But: sh404SEF has the little bug (or is it a feature?), that if you activate using IDs in category-URLs, it also adds them to the page title, which is not that useful.

To deactivate the category-IDs from the page title, you’ll have to hack a PHP-File. It sounds hardy, but it isn’t.

Remove the category ID from the page title

  1. Use your familiar FTP-application, connect to your VirtueMart store and go to the folder /components/com_sh404sef/meta_ext
  2. Here you will find a file called “com_virtuemart.php“. Open that file in an editor.
  3. Look for the first function that is declared in this file. It begins with function vm_sef_get_category_title( &$db, &$catDesc, $category_id, $option, $shLangName ){
  4. Later on in this function, around line 81, you’ll find this declaration of the page title:
    $title='';
    do { // all categories and subcategories
    $title .= ( $sefConfig->shInsertCategoryId ?
    $tree[ $category_id ]->category_id.$sefConfig->replacement : '')
    .$tree[ $category_id ]->category_name. ' | ';
    $category_id = $tree [ $category_id ]->category_parent_id;
    } while( $category_id != 0 );
    return rtrim( $title, ' | ');
  5. You will have to change the first set of definition to the page title. Change the lines
    $title .= ( $sefConfig->shInsertCategoryId ?
    $tree[ $category_id ]->category_id.$sefConfig->replacement : '')
    .$tree[ $category_id ]->category_name. ' | ';
    to
    $title .= /* ( $sefConfig->shInsertCategoryId ?
    .$tree[ $category_id ]->category_id.$sefConfig->replacement : '') */
    $tree[ $category_id ]->category_name. ' | ';
    That means that you comment out (“/* comment here */”) using the category id in your page title. You could also delete this, but I prefer leaving such reductions in the original PHP-file for later reference.
  6. Be sure to remove the “.” before the second $tree-variable, otherwise you shop won’t work. an return a PHP-error.
  7. Save that file and re-upload it to its destination folder.

Done! You dont’t even need to purge your SEF-URLs.

, , , , ,

Ich habe ein Problem mit dem Kampagnen-Tracking bei PIWIK. (Genauer genommen sind es mehrere, ich glaube ich bin zu blöd das vernünftig einzusetzen.) Jedoch hier das “größte”:

Ich betreibe beruflich einen kleinen Shop. Der Shop ist auf anderen Websseiten mit Kampagnen verlinkt. Die Besuche werden den Kampagnen (meistens) vernünftig zugeordnet. Wenn nun einer der Besucher ein Ziel errreicht, wird zwar die Konversion gezählt, jedoch in einer zweiten, neuen Kampagne, die den gleichen Namen aber dafür 0 Besuche hat. Das sieht dann in etwa so aus:

PIWIK: Konversions nach Kampagnen mit Koversionen für 0 Kampagnen-Besuche.

PIWIK: Konversions nach Kampagnen mit Koversionen für 0 Kampagnen-Besuche.

Die Zuordnung von Konversionen zu Suchmaschinen, Suchbegriffen und Websites funktioniert jedoch einwandfrei.

Was mache ich falsch?

, , ,

Wie ich ja vor geraumer Zeit schon berichtete, verursachen die beiden Lightbox bzw. Slimbox von Joomla! und VirtueMart untereinander Schwierigkeiten. In Folge dessen hatte ich ja die YOOEffects Lightbox (in Joomla! mitgeliefert) deaktiviert. Nun wollte ich die Lightbox aber ausserhalb von VirtueMart doch nutzen, jedoch nur für eine bestimmte, dritte Extension, nämlich die Freestyle FAQ Lite.

Nachdem ich ein bischen in der Joomla!-Dokumenation gestöbert hatte und versucht hatte, im Forum einen meinem Problem entsprechendem Beitrag zu finden, was jedoch weitestgehend erfolglos blieb. Denn mein Problem ist – anders formuliert und auf den Punkt gebracht:

Wie kann ich ein Stylesheet und ein JavaScript von einer Joomla!-Komponente für eine andere benutzen?

Und um es ein wenig einzugrenzen: Das Stylesheet und das JavaScript sollen nur bei dieser einen Komponente geladen werden.

Denn ich wollte das beides nicht einfach in die index.php-Seite schreiben. Denn dies bedeutet, dass die Slimbox von VirtueMart bei jeder anderen Joomla!-Seite, die dies zum einen nicht unbedingt benötigt und zum anderen dadurch die Ladezeiten und den HTML-Code unnötig vergrößert, mitliefern. Mit den im Forum und in der Dokumentation gewonnenen Informationen kurzentschlossen selbst Hand angelegt.

Der verantwortliche Code

Ein Leichtes war es nämlich herauszufinden, dass folgende drei Zeilen Code mit der Angabe der entsprechenden Konstanten für den Aufruf des Stylesheets und des JavaScriptes sorgen:
$document =& JFactory::getDocument(); // Referenz zum Dokument herstellen
$document->addStyleSheet($url);
$document->addScript($url);

Die Variable $url sollte nicht zwei mal verwendet werden, da Stylesheet und JavaScript an unterschiedlichen Orten liegen. Da ich die Variablen nicht definieren wollte, habe ich hier statt dessen direkt den Pfad eingetragen (siehe unten).

Welche Datei ist für das Laden des Codes verantwortlich?

Das war eigentlich das schwierigste Unterfangen hierbei: herauszufinden, in welcher Datei ich den Code einfügen muss, damit das Stylesheet und das JavaScript geladen werden. Da ich im Forum gelesen hatte, dass dies in der “Hauptdatei” eingefügt werden müsse, habe ich nach einigem Suchen (das ist ja das schlimmste an Joomla!: diese Dateistruktur!) die richtige Datei gefunden.

/components/com_fsf/views/faq/tmpl/default.php

Der Code funktioniert aber genau so gut in der view.html.php unter

/components/com_fsf/views/faq/view.html.php

 

Den PHP-Code einfügen

Das Einfügen des Codes in die default.php ist hierbei nicht ganz trivial. Man muss nämlich darauf achten, es an die richtige Stelle zu bringen. Denn nach einer kurzen PHP-Deklaration folgt jede Menge HTML-Code – und in diesem nützt der PHP Code nicht viel, denn die Links zum Stylesheet und zum JavaScript müssen ja in den -Tag des HTML-Dokuments. Ich habe also die Stelle
<?php
// No direct access
defined('_JEXEC') or die('Restricted access'); ?>
 

<div class="component-header">
<div class="componentheading">
Frequently Asked Questions (FAQ) - Häufig gestellte Fragen
</div>
</div>

ziemlich am Anfang der Datei genommen und es vor dem PHP-beendenden Tag ?> eingefügt. Wichtig: vor dem Fragezeichen muss immer ein Leerzeichen stehen.

Dort habe ich diesen angepassten Code eingefügt:

// adding Virtuemart Lightbox to this module
$document =& JFactory::getDocument();
$document->addScript('/components/com_virtuemart/js/slimbox/js/slimbox.js');
$document->addStyleSheet('/components/com_virtuemart/js/slimbox/css/slimbox.css');

Das Einfügen des Codes in die view.html.php im darüber liegenden Ordner habe ich auch probiert – das funktioniert genau so gut. Ich habe es dann dort gelassen, denn irgendwie erschien mir das Laden des Stylesheets und des JavaScriptes an dieser Stelle sinnvoller.

, , ,

Mit PIWIK kann man ebenso wie bei Google Analytics bestimmte Seiten als Ziel (“Goal“) definieren und somit sich einfach darstellen lassen, ob bestimmte Unternehmensziele erreicht werden, oder was z.B. SEM-Kampagnen für den Online-Umsatz tatsächlich eingebracht haben. Mit den Zielen kann man herausfinden, wie hoch die Wandlungsquote (“Conversion-Rate“) einer bestimmten Maßnahme in bestimmte Aktionen ist. Dabei muss es nicht immer um erfolgreich abgeschlossene Käufe gehen, sondern ein solches Wandlungsziel (“Conversion-Goal“) kann auch die Zahl der neu angemeldeten Nutzer für ein Forum o.ä. sein, die Anzahl der Downloads einer bestimmten Datei, usw.

Im Grunde ist das Verfahren recht simpel: Ich definiere eine Seite, deren Aufruf als Ziel gewertet werden soll. Das Analyse-Tool zählt dann wie gewohnt die Webseiten-Besuche, über welche Keywords und welche Referrer (Webseiten, Suchmaschinen, oder vorher definierte Kampagnen) die Besucher kommen, wie oft ein bestimmtes Ziel aufgerufen wurde und bringt dann diese Daten zusammen. Das sieht dann in der Auswertung bei PIWIK etwa so aus:

PIWIK Ziel-Conversion-Rate

PIWIK Ziel-Conversion-Rate

Nun fiel mir aber auf, dass die Berechnung nicht ganz stimmen kann. Wie man in dem Bild oben sieht, ist nämlich die Wandlungsquote bei weniger Besuchen und gleicher Zahl der Wandlungen niedriger – was ja nicht sein kann! Oder nach Marta Milchmädchen: Wenn von 20 Äpfeln 5 verfault sind, dann ist das ein Viertel. Wenn ich von diesen 20 Äpfeln 5 (noch gute) esse, die 5 verfaulten aber drin lasse, dann sind von der übrigen Menge bereits ein Drittel verfault.

Wenn von 621 Besuchen nun also 5 das Ziel erreichen, sind das rund 0,81% – und eben nicht 0,96%! Das mag zwar kleinkariert klingen, ist aber ein Fehler, der bei großen Zahlen ebenso große Auswirkungen haben kann. Eine Abweichung von immerhin 0,15%, die aber bei den anderen beiden Werten (5 auf 605 und 5 auf 597) etwa gleich ist.

Ich hab mir gedacht: das kann doch nicht sein, dass PIWIK da so einen riesigen Rechenfehler hat! Zur Sicherheit habe ich mir dann die komplette Tabelle heruntergeladen – denn ich weiß, dass hier gerne mehr Werte drin stehen, als in der Auswertung angezeigt werden.

Und siehe da! Ich habe doch die “richtige” Rechengröße gefunden. In der ganz letzten Spalte der zugehörigen Tabelle sind die “Unique Visitors” angegeben. Diese sind bei den drei Zugriffsquellen 523, 597 und 581. Und wenn ich anhand dieser eindeutigen Besucher die Wandlungsquote erneut berechne, was ja auch logisch betrachtet Sinn macht, komme ich auf die angegebene 0,96%, 0,66% und 0,68%.

PIWIK zeigt also in der Standard Ziel-Auswertung die Besuche an und nicht die Besucher, berechnet aber anhand der eindeutigen Besucherzahl die Wandlungsquote eines Ziels. An und für sich betrachtet, ist es korrekt, die Conversion-Rate anhand der eindeutigen Beuscher zu berechnen – In der normalen Auswertungsansicht diese Zahl aber vorzuenthalten und statt dess die Visits anzuzeigen, ist irgendwie … unsinnig!

, , , ,

Wenn man auf Groupon.de bis ganz ganz ganz ganz nach unten scrollt, da wo eigentlich nur noch die langweiligen Links zum Impressum, den AGB, und dem Nährwert des Frühstücks vom Datenschutzbeauftragten vermutet werden können, findet man statt dessen diesen Text:

Jeder, der für eine Stadt einen Rabattgutschein 2011 sucht, kann mit einem Gutschein, Coupon oder bei einem Deal von Groupon Geld sparen. Für viele Städte gibt es ein Gutscheinbuch oder ein Gutscheinheft. Durch eine große Anzahl der verkauften Gutscheine können wir euch bei Groupon immer besonders günstige Angebote – wir sprechen von Deals – anbieten. Anders als bei einem Gutscheinbuch Berlin oder Gutscheinbuch München wirst Du bei Groupon jeden Tag aufs Neue mit tollen Deals überrascht. Du findest einen Deal für Restaurants & Bars, diverse Events, sowie für Dienstleistungen, für Online-Shops und zum Shoppen in deiner Stadt. Du kannst deinen Deal, Gutschein, Coupon oder Rabattgutschein zum Beispiel für Wellness, ein Freizeit Erlebnis oder ein Restaurant benutzen. Entdecke deine Stadt aufs Neue in Ihrer ganzen Vielfalt, und spare dabei bares Geld durch den richtigen Gutschein mit satten Rabatten. Du reist nach Berlin, München, Hamburg oder Köln? Auch hier hat Groupon den passenden Deal: Ob nun ein Gutschein für ein Restaurant in Berlin oder aber als Wellness Gutschein: Dein Deal von Groupon hilft dir, deinen Geldbeutel zu entlasten und attraktive Angebote in deiner Stadt zu finden. Auch im gesamten Ruhrgebiet gibt es täglich wechselnde Deals, die deine Freizeit- Erlebnisse versüßen werden. Zusätzlich findest du unter unserem Online-Deal täglich einen attraktiven Gutschein, den du bundesweit einlösen kannst. Finde bei Groupon deinen Deal, der Wellness günstig macht und sorge so für einen entspannten Tag.


Wie wäre es z.B. mit einem Gutschein für einen Wellnesstag in Frankfurt, dem nächsten Konzert- Deal in Stuttgart oder einem Erlebnistag in Dortmund mit vielen Rabatten? Oder gönne dir eine gehörige Portion Action mit einem Gutschein für die beliebtesten Fun- und Extremsportarten in Düsseldorf oder Essen. Übrigens: Restaurant Gutscheineund Wellness Gutscheinevon Groupon lassen sich auch super als Gutschein schenken. Verschenke z.B. einen Shopping-Gutschein für Bremen oder Hannover und mache deine Liebsten glücklich. Oder ihr holt euch zusammen einen Event – Gutschein und spart bei eurem nächsten Konzertbesuch z.B. in Leipzigoder Dresden. Mit einem Gutschein von Groupon ist es so einfach zu sparen. Wo auch immer ihr wohnt, es gibt den passenden Deal. Ob in Nürnberg, Duisburg, Bochum oder ob ihr Freunde und Bekannte in Wuppertal, Bielefeld, Bonn oder Mannheim überraschen wollt, einfach euren Deal sichern, Gutschein ausdrucken und sich über die Rabatte freuen. Auch für Karlsruhe, Wiesbaden, Münster und Augsburg findet ihr täglich Gutscheine für Restaurants und Bars. Den besten Deal mit Rabatten für euren Wellnesstempel in Gelsenkirchen, Aachen, Mönchengladbach und Braunschweig werden bei Groupon regelmäßig angeboten und den besten Deal für Action in Chemnitz, Kiel oder Krefeld findet ihr ebenfalls auf der jeweiligen Städteseite. Habt ihr schon gesehen, welchen Deal es heute in Halle gibt und was in den letzen Tagen die Groupon- Gutscheine in Freiburg, Oberhausen und Lübeck waren? Man kann wirklich in jeder Stadt durch Angebote von Groupon sparen. Auch in der Umgebung von Erfurt, Rostock und Mainz gibt es täglich Rabatte für Restaurantbesuche, Massagen, den nächsten Haarschnitt und vieles mehr. Werde Mitglied der Groupon-Community und erlebe das Groupon Feeling. mehr…

via groupon.de – Die Links sind genau so im Original-Text

Man könnte das ja SEO nennen – langläufig auch als Voodoo-Zauber Glaskugelgucken Suchmaschinenoptimierung bezeichnet, aber das finde ich schon wirklich extremst übertrieben. Dann “natürliches” SEO ist das nun wahrlich nicht. Manche Sätze lesen sich, als wurden die vom Google-Bot persönlich geschrieben: “Übrigens: Restaurant Gutscheineund Wellness Gutscheinevon Groupon lassen sich auch super als Gutschein schenken“. Ob die fehlenden Leerzeichen Absicht sind?

Den ganzen Text unterhalb der Linie sieht man nur, wenn man das Textfeld markiert, kopiert und woanders einfügt – oder einfach direkt auf “mehr” klickt.

Das grenzt meiner Meinung nach schon scharf an Wettbewerbsverzerrung. Aber bei so vielen Inhaltsheissluftgebläsen, wie es hier im Netz gibt, fällt das nun auch wieder
nicht wirklich auf.

,

Ich arbeite ja seit einiger Zeit an einem Onlineshop-Projekt, welches VirtueMart unter Joomla! benutzt.
Hier gibt es das tolle Feature, dass Produktbilder in der Vergrößerungsansicht statt in einem Pop-Up in einer so genannten Lightbox geöffnet werden. Das ist im Grunde auch eine Art Pop-Up, jedoch nicht in einem neuen Browserfenster, sondern direkt im gleichen Fenster, wo der Rest der Webseite in den Hintergrund (und meisten abgegraut) rückt. Praxisbeispiel siehe Abbildungen unten ;-)

Nun ist es so, dass unter (scheinbar) normalen Umständen die Produktabbildungen im Shopsystem Virtuemart in zwei Lightboxes, die übereinander liegen, geöffnet werden. Der Grund hierfür ist simpel: zum einen bietet das (Standard-?) Plugin “YOOeffects” eine Lightbox für Bildverknüpfungen an, und das Joomla!-Modul VirtueMart eben auch. Wenn in beiden die Lightbox aktiviert ist, werden eben auch beide geöffnet.

Lightbox von VirtueMart

Die VirtueMart Lightbox heisst eigentlich “Slimbox“. Diese Information is wichtig, wenn ihr danach im Quellcode suchen wollt – ich habe mir einen Wolf nach dem entsprechenden Scriptaufruf gesucht, bevor ich das wusste. Die Slimbox kann man ein-/abschalten in den Einstellungen unter “Administration / Konfiguration” -> “Seite”, dort unter “Layout” im Punkt “Wählen Sie das Thema/Stil für den Shop” diesen kleinen “Konfuguration”-Link klicken.

VirtueMart Slimbox deaktivieren Schritt 1

Hier kann man dann unter “Open Product Images in a LightBox?” eifnach “No” auswählen. Dies hatte bei mir aber zur Folge, dass die Produktabbildungen gar nicht mehr in einer Lightbox, sondern in einem Browser-Pop-Up geöffnet wurden.

VirtueMart Slimbox deaktivieren Schritt 2

Also: Kommando zurück und die andere Lightbox deaktivieren.

Lightbox von Joomla! / YOOeffects

Im Joomla!-Menü unter “Erweiterungen” die “Plugins” aufrufen und dort auf YOOeffects klicken, um in die Einstellungen für das Plugin zu gelangen. Das Plugin kann sich auf der zweiten Seite befinden, das Joomla! standardmässig nur 20 Einträge pro Seite anzeigt, hier also ggf. weiter blättern.

Hier kann man in den Plugin-Einstellungen bei “Lightbox” einfach “Nein” auswählen und schon ist das Problem gelöst! :-)

YOOeffects Lightbox deaktivieren

Die Produktabbildungen werden übrigens nur dann in der Slimbox geöffnet, wenn im jeweiligen Produkt keine URL angeben ist. Denn dies ist die URL, mit der das Bild im Frontend verlinkt werden soll (URL leer bedeutet also, “Großes Bild aufrufen”). Die Lightboxen funktionieren auch normalerweise nur dann, wenn der Link direkt auf eine Bilddatei verläuft und im <a href=”…”>-HTML-Tag der Schnipsel rel=”lightbox” mitgeschleppt wird, was das Plugin aber bei korrekter Installation per JavaScript von selbst erledigt.

VirtueMart Produktdetail-URL entfernen, um Großbildansicht (in Lightbox oder Browser-pop-Up) zu aktivieren.

Button-Grafiken der VirtueMart Slimbox hinzufügen

Jetzt fehlten aber bei der VirtueMart-Slimbox – zumindest bei mir – noch die Buttons (vorheriges Bild, nächstes Bild, Schliessen). Nachdem ich im HTML-Quellcode den Scriptaufruf gefunden hatte, wusste ich auch, in welchem Pfad ich danach suchen sollte: In /components/com_virtuemart/js/slimbox/css findet sich die CSS-Datei, die steuert wie die Slimbox aussehen soll. Hier erfährt man auch, ob die Buttons aufgerufen werden, in welchem Pfad die liegen sollen und wie deren Dateiname ist.

Pfad

Ganz einfach. Ein Blick in das CSS verrät alles.
#lbPrevLink:hover {
background: transparent url(prevlabel.gif) no-repeat 0 15%;
}

Die Dateien liegen also im gleichen Verzeichnis, wie das CSS für die Slimbox.

Dateinamen

Die Dateien heissen

  • blank.gif
  • closelabel.gif
  • loading.gif
  • nextlabel.gif
  • prevlabel.gif

Aufruf der Button-Dateien

Kann man ganz einfach checken. Im Slimbox-CSS sollten folgende Zeilen (an unterschiedlichen Stellen) enthalten sein:
.lbLoading {
background: #fff url(loading.gif) no-repeat center;
}

#lbPrevLink:hover {
background: transparent url(prevlabel.gif) no-repeat 0 15%;
}

#lbNextLink:hover {
background: transparent url(nextlabel.gif) no-repeat 100% 15%;
}

#lbCloseLink {
background: transparent url(closelabel.gif) no-repeat center;
}

Bei dem Close-Link standen bei mir noch mehr Werte, die dessen Erscheinungsbild definieren – aber die sin an dieser Stelle ja nicht so wichtig. Wenn die Dateien von einem anderen Ort abrufen werden sollen, kann das hier in der url()-Variablen angegeben werden.

Ich habe mir die entsprechenden Grafiken besorgt und ins Verzeichnis hochgeladen. Neu einem Chache-bereinigtem Neuladen der Produktdetailseite (Strg+F5 statt nur F5 – denn das CSS muss ja auch neu geladen werden) wurden die Buttons dann auch angezeigt.

, , , ,

Vor kurzem hatte ich erwähnt, dass dass Tracken der Downloads nach dem anonymisieren der IP-Adressen nicht mehr funktionierte. Das Problem scheint nun gelöst zu sein.

Schuld daran war nicht, dass die IP-Adressen abgeschnitten wurden, sondern der Tracking-Code auf den asynchronen umgestellt wurde. Denn statt des onClick-Befehls javascript: pageTracker._trackPageView wird jetzt ein anderer Code dem Anchor-Tag hinzugefügt:
<a href="#" onClick="_gaq.push(['_trackEvent', 'category', 'action', 'label', 'value']);">Linktext</a>
Denn leider ist nach wie vor nur mit Hilfe des onClick-Aufrufs das Zählen von Dateiaufrufen möglich, die den Tracking-Code nicht originär enthalten (im Grunde alles, was keine HTML-Seite ist). Aber wie auch mit dem alten Tracking-Code kann man nach wie vor ausgehenden Traffic tracken (alle Links zu externen Seiten, die den eigenen Tracking-Code logischerweise nicht enthalten).

Die Syntax kurz erläutert

  • _gaq.push – ruft das JavaScript auf
  • _trackEvent – der Befehl, der ausgeführt wird
  • category – Die Kategorie, die dem Klick zugewiesen werden soll. Sie ist frei definierbar und wird als solche später im Auswertungsmenü angezeigt. Die kategorie zu besetzen ist Pflicht (sonst wird’s nicht gezählt).
  • action – Die Aktion, die aufgezeichnet werden soll. Sie ist auch frei definierbar und wird separat angezeigt. Auch die Aktion ist sozusagen ein “Pflichtfeld”.
  • label – besteht aus ein oder mehreren Schlagworten, um die Aktion näher einzugrenzen. Auch hier kann man frei definieren. Leider kann man nicht mehrer verschiedene Labels einem Event zuordnen. Dieses Feld ist optional.
  • value – Man kann diesem Klick einen Wert zuweisen. Denkbar ist ein Klickwert analog zum CPC, oder sonst irgendwas (man kann mit einer weiteren Ergänzung z.B. die Downloadzeit hier tracken).

Google hat auf seiner Code-Dokumentation ausführlich erklärt, worin sich die einzelnen Werte unterscheiden. Ich finde es jedoch viel schneller einleuchtend, das mal visuell in Google Analytics zu sehen. Über “Content -> Ereignistracking” landet man in der Übersicht, die darstellt, was hier getrackt wurde.

Eventtracking mit Google Analytics: Kategorien und Aktionen

Bereits auf der Übersichtsseite sieht man deutlich, wie sich die definierten Kategorien und Aktionen hierarchisch anordnen. Beide sind zwar nebeneinander auszuwerten, jedoch nicht bis in jede Detailtiefe.

Parameterhierarchie

Kurz und knapp: Es gibt zwei Möglichkeiten.

  1. Kategorie -> Ereignis-Aktion -> Ereignis-Label
  2. Ereignis-Aktion -> Ereignis-Label

Da die zweite hierarchische Anordnung vollkommen redundant ist, gehe ich davon aus, dass sie nur existiert um die zugewiesenen Ereigniswerte anders zusammen zu fassen. Denn der vorher zugewiesene Ereigniswert und der durchschnittliche Ereigniswert werden immer in der zugehörigen Tabelle mit ausgegeben und können somit nur sekundär ausgewertet (angezeigt) werden.

Taxonomie

Man kommt also nicht umhin, sich eine vernünftige Taxonomie auf zweieinhalb Ebenen auszudenken – so viel Gehirnschmalz verlangt Google einem leider ab. Jedoch hat mir die Frage: “Steckt in dem Eventtyp nicht auch ein wenig die Aktion und der Dateityp drin? weiter geholfen. Denn alle weiteren Schlagworte o.ä. fügt man eben als Label ein und muss dann Filtern. Aber vielleicht wird das ja mal weiter entwickelt, so dass man mehrere Tags nebeneinander vergeben und auswerten kann. Denn für meine Bedürfnisse ist es wichtig, die Antworten auf diese Fragen als Informationen in die Auswertung zu transportieren:

  • Download oder Link auf externe Seite?
  • Auf welche Seite führte der Link?
  • Von welcher Seite wurde der Link angeklickt?
  • Welchen Dateityp (=Dateiendung) hat die heruntergeladene Datei?
  • Welcher Inhaltskategorie ist die Datei zuzuordnen? Die Frage ist ein bischen wie “Aus welcher Seitenrubrik kam der Download?”: Pressetext, Produktbroschüre, Teilekatalog, etc. aber auch: Stellenanzeigen
  • Zu welchem Produktsegment gehört die Datei (z.B. Zubehörteile, Werkzeuge oder Materialien)?
  • Zu welchem Produktmarkenbereich/-segment gehört die Datei? (z.B. Consumer/B2B, VW, Audi oder Porsche?)
  • Zu welchem Produkt gehört die Datei? (Golf, Jetta, Passat oder A6, A4, A8)
  • Von welcher Sprachseite aus wurde die Datei heruntergeladen (deutsch, englisch, rumänisch, etc.)? Denn bei uns liegen die Dokumente nur in einer “Sprache” vor: technisch. %)

Für mich stellt sich bei diesem ganzen vertagge und ausgewerte vor allen Dingen eine Frage: Muss ich diese Unmengen an Dateien eigentlich zum Download anbieten? Der Rattenschwanz ist nämlich: regelmäßig aktualisieren mit Text, Inhalt, Bildern und Umbruch, auf den Server hochladen und ggf. neu verlinken. Denn die auszuwertenden Dateien sind überwiegend Broschüren und Listen mit Produktvariationen und -ergänzungen in Form von PDFs. An oberster Stelle also für mich wichtig: welche Inhaltstypen (“Seitenrubrik”) werden wie häufig runter geladen?

Ich habe mir also gedacht, als Kategorie die jeweiligen Seitenrubriken zu verwenden, von denen der Download getätigt wurde: Pressetext, Typenliste (Produktvariationen), Prospekte / Broschüren, Bildarchiv, Software. Einziger Ausreisser ist hier der “ausgehende Traffic”. Das ist aber nicht weiter schlimm, denn es ist eben der einzige.

Als Aktion verwende ich zum einen den Dateitypen (PDF, EXE), bei den Bildarchiv aber feiner unterschieden in “JPG – 300dpi”, “JPG- 72dpi” und “EPS”, oder die URL der Webseite des externen Links (www.domain.com).

Alle anderen Informationen packe ich ins Label. Dort stünde dann z.B. “Audi A6 Zubehör – Baujahr 2006-2008″ oder meinetwegen auch “Kettensägen – mit Elektromotor – STIHL”. Bei Pressetexten nehme ich einfach den Titel der Pressemitteilung, bei Bildern die Bildkategorie und den Titel.

Das einzig müßige an dieser Geschichte ist, dass man den EventTracker in jedem Link manuell hinterlegen muss. Für WordPress gibt es mit dem GoogleAnalytics-Plugin zwar eine Option, das automatisch mit zu übernehmen (man kann hierbei die zu trackenden Dateinamenendungen mit angeben), aber für andere CMS … muss ich mal suchen ;-)

, ,

Ich arbeite noch nicht lang mit Joomla!, aber im Grunde genommen ist es eben ein Content-Management-System wie jedes andere: es hat so seine Vorteile (von denen ich jetzt noch keinen so richtig gefunden habe) und seine Nachteile und Herausforderungen. Aber was wäre Webseitenprogrammierung ohne Herausforderungen?

Eine Herausforderung vor der ich stand, war das einbinden von “fremden” Webseiteninhalten auf einer anderen Seite. Dabei geht es nicht um den berühmten “Content-Klau“, nein. Ich wollte, bzw. ich muss, bestimmte Inhalts-Texte an verschiedenen Stellen und in verschiedenen Gesamt-Kontexten darstellen. Am Beispiel: In jedem Online-Shop gibt es ja die gefürchtete Widerrufsrechts-Belehrung. Diese muss sowohl in den AGB vorkommen, als auch separat abrufbar sein und vor jedem Absenden einer Bestellung nochmal eingeblendet und bestätigt (per Checkbox o.ä.) werden.

Ich wollte tunlichst vermeiden, dass ich an drei verschiedenen Stellen die Widerrufsrechtsbelehrung manuell eingebe (okay, da gäbe es Copy & Paste, aber:) und womöglich bei einer Änderung einer dieser Texte vergessen wird. Ich dachte mir: Hey, im Grunde erstellst du eine Seite mit nur diesem Text (und sonst nichts) und blendest den dann als iframe eben an den jeweiligen Stellen ein. So musst du nur einmalig die originäre Seite ändern.

An dieser Stelle jedoch macht es Joomla! dem “Webmaster” (oh man, der Begriff ist so 90er) aber nicht einfach. Aufgrund eines Sicherheitspatches von vor irgendwann, fiel die Einbettung von iframes in Beitragsseiten raus. In der Praxis kann man sich dann im Editor die Finger wund tippen, der Editor schmeisst die <iframe></iframe>-Tags immer raus – und natürlich alles, was dazwischen steht. Auch das umstellen vom Rich-Text-Editor auf “Kein Editor”, wie an vielen Stellen vorgeschlagen, half mir nicht.

Ich wurde heute dann endlich im Joomla!-Forum fündig. Die Lösung ist an sich ganz simpel, macht auf mich aber eher den Eindruck eines beabsichtigten Work-Arounds, statt einer richtigen Lösung.

Step-By-Step: Ein iframe in einem Joomla!-Beitrag einbinden

Grundsätzlich heissen in Joomla! die iframes wohl “Wrapper“. Um einen solchen hinzuzufügen:

  1. Im Joomla!-Menü unter “Erweiterungen” -> “Module” -> “Neu” den Wrapper auswählen.
  2. Einen Titel und die Position auf der Seite festlegen. Ich habe eine eigene (unique) Position für jeden iframe verwendet.
  3. Unter den Moduleigenschaften die URL festlegen. Leider funktioniert nur eine absolute URL, das heisst, der ganze vollständige Pfad mit http:// uzsw. muss angegeben werden.
  4. Speichern
  5. In dem Beitrag, in dem der iframe stehen soll, mit der Textzeile {loadposition position} die jeweilige Seite laden. Statt position einfach die im Wrapper vergebene Position aufrufen.

Bei mir funktioniert es damit. Der Befehl {loadposition position} ist eigentlich dazu gedacht, ein Modul in einem Beitrag anzuzeigen und wird genau so in der Joomla!-Dokumenation erklärt.

Leider wird die Funktion “Autohöhe”, die der Wrapper zur Wahl stellt, nicht richtig umgesetzt. In dem Layout in dem ich mich befinde, wird der umliegende div(?)-Container nicht automatisch vergrössert. So muss ich die Höhe manuell festlegen. Auch, dass die URL-Pfade nur vollständig und absolut funktionieren, finde ich unschön. Bei Dateien bzw. Seiten, die auf dem gleichen Server liegen … ach naja, was soll ich mich drüber ärgern. Ändert ja doch nichts.

Falls ihr ein iframe von eurer eigenen (Joomla!-) Seite einbauen wollt und feststellt, dass ihr mit o.g. Methode die Seite im kompletten Layout einbindet, versucht statt der Seite “../index.php?article&id=4” einfach mal “index2.php?article&id=4“. Das bindet nur die jeweilige Seite, ohne das Layoutgerüst drum herum ein. Den “option=com_content&view=”-Teil vom URL-String kann man in beiden Fällen getrost weglassen.

, , ,

Ich habe vor kurzem dafür gesorgt, dass bei meinem Unternehmen, das auf seiner Webseite auch Google Analytics einsetzt, Datei-Downloads von z.B. PDF-Dateien mitgezählt werden. Diese werden nämlich von Google nicht standardmäßig erfasst, da in diesen Dateien der Tracking-Code naturgemäß nicht aufgerufen wird.

Zur Zeit nutzt die Seite PIWIK und Google Analytics parallel. Wir wollen erst einmal abwarten, wie sich das mit Google weiter entwickelt. Mittelfristig werden wir auf PIWIK allein umstellen, jedoch sammeln wir hierfür erst einmal Daten um später Vergleiche ziehen zu können. Denn Google Analytics und PIWIK zählen dann doch irgendwie unterschiedlich, womit die Daten miteinander nicht vergleichbar sind.

Hierzu ergänzt man im HTML den Link einfach um den JavaScript-Befehl pageTracker._trackPageview, was dann so aussieht:
<a href="http://www.yourdomain.de/yourfile.pdf" onclick="javascript: pageTracker._trackPageview('/name-unter-der-die-datei-in-GA-auftauchen-soll'); ">Linktext</a>

Das ist genau so eingebunden, wie die Google-Analytics-Hilfe mir das erzählt hat. Es hat zunächst auch ganz gut geklappt und Google hat fein brav die Downloads gezählt.

Nun kam auf anderer Seite hinzu, dass aufgrund der datenschutzrechtlichen Bedenken wir die IP-Adressen mit Hilfe der Tracking-Code-Funktion anonymizeIP abgeschnitten haben. Hierbei wird das letzte Oktett der IPs auf “0″ gesetzt, so dass diese im Zweifel mit 198.178.168.0 angezeigt werden. Das hat zwar zur Folge, dass man die Benutzerzugriffe auf die Seite nicht mehr allzu genau auf den Ort herunterbrechen kann – jedoch ist das selbst bei einer vollen IP-Adresse nicht immer 100%-ig korrekt, denn es wird lediglich der Standort des Einwahlknotens aufgeführt.

Eine genaue Anleitung, wie die IP-Adressen zu anonymisieren sind und was dies zur Folge für die Bestimmung des Zugriff-Ortes hat, gibt es im webalytics-blog. Wir verwenden für unsere Seite den entsprechend angepassten asynchronen Tracking-Code:
<script type="text/javascript">
 
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXX-X']);
_gaq.push(['_gat._anonymizeIp']);
_gaq.push(['_trackPageview']);
 
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
 
</script>

Seit dem die Anonymisierung der IP-Adressen in das Tracking-Code-Snippet mit eingebaut ist, werden jedoch die Downloads nicht mehr gezählt. Der Code befindet sich (derzeit noch) am Ende der Seite, dort wo früher der alte Tracking-Code stand. Der sollte immer unten stehen, damit nur Seitenaufrufe gezählt wurden, bei denen die Seite auch bis zum Ende geladen wurde.

Kennt jemand das “Problem”? Liegt es möglicherweise daran, dass der Code am Ende der Seite ist? Oder ist mit der Anonymisierung der IPs keine Download-Tracking mehr möglich? Das in meinen Augen keinen logischen Sinn macht (ausser dass Google sauer ist, weil man ihnen die IPs verheimlicht).

, , ,