2010-10-27

Online-Marketing Notizen

In einem vorherigen Blogpost habe ich bereits die Online-Marketing Buzzwords aufgelistet, die mir bei der Lektüre von Einführungsliteratur zum Thema Online-Marketing über den Weg gelaufen sind.
Dieser Post erweitert nun das Themengebiet um ein paar Notizen, die ich mir beim Stöbern gemacht habe.
Ziel dieses Beitrages ist es nicht, das Thema umfangreich zu beleuchten. Dafür ist es selbstverständlich viel zu komplex, sondern lediglich ein paar relevante Stichpunkte aufzulisten.

Online-Marketing umfasst folgende Bereiche:
  • Affiliate-Marketing
  • Suchmaschinen-Marketing bestehend aus
    •  SEO
    •  AdWords
  • Online-Werbung
  • Email-Marketing
  • Sozial Networks

Stichpunkte zu den einzelnen Themen:
(BTW: Unterscheidung zwischen Webseite (einzelne Seite) und Website (gesamter Webauftritt) beachten.)

AdWords:
  • Keyword-Kombinationen mit Städtenamen sind billiger
  • wenige relevante Keywords reichen
  • Über welche Suchbegriffe landen Nutzer auf der Website?

Suchmaschinen-Optimierung:
  • Städtenamen in URL, Meta-Tags, etc. einfügen (auch aus Umland)

Onsite-Optimierungen: 
  • Textoptimierungen
  • Struktur der Website
  • valider HTML-Code
  • Writing for the Web
  • Tools zur Überprüfung der Keyword-Density
  • pro Webseite nur einem Thema widmen
  • Google Sitemap integrieren
  • inhaltliche Nähe verschiedener Seiten durch Verlinkungen untereinander unterstützen
  • relevante Suchworte in den title-Tag
  • URL und title-Tag koppeln
  • Linktext sollte Wörter enthalten, um die es auf der Zielseite geht

Offsite-Optimierung:
  • Wie bekomme ich Backlinks?
  • Platzierung in: Google News, Google Images, YouTube, MyVideo, Clipfish, Sevenload, Blogs, Google Maps
  • News: Presseportale nutzen, zB. openpr.de
  • Landingpages mit Video haben eine 20% höhere Conversionrate
  • YouTube Videos pushen durch viele Views und vielen Kommentare
  • Bildersuche: Suchbegriff häufig in Nähe des Bildes verwenden
  • Bilder mit mind. 400px Breite hochladen

Soziale Netzwerke:
  • Bis 2012 nutzen rund ein Drittel der deutschen Bevölkerung Soziale Netzwerke! (heise.de/newsticker/meldung/print/107311)

2010-10-24

"Append JavaScript at the end of my html file" - Component for Tapestry 5.1

This post describes a service, that enables Tapestry to append JavaScript files and script parts at the end of a html file. Script files and scripts can be "dropped into the service" from any page class or component and will be rendered in that order (FIFO) at the end of the page.

Upgrade Tapestry 5.0.x to Tapestry 5.1. loads included JavaScript files in the HTML head. Reasons are discussed in the Upgrade Notes: http://tapestry.apache.org/tapestry5.1/upgrade.html
project-wide release notes. They told me that in fix for bug TAP5-544:
Firstly, JavaScript libraries would have to move (back) to the head, permanently, no configuration [...].
Maybe I did not understand the real concern, but: Why isn't it up to the developer to decide where to place script files?
I decided to write a component that appends my script files at the end of my html files. The most important reason for this descicion is, that--following Yahoo's performance guidelines--I'd like to first load my HTML DOM before loading the script files.

Write a Service to Collect Files to Append
We need an Interface to be able to use the perthread scope (more about scoypes: "a per-thread instance is created on demand, behind a shared proxy").
The Interface just consists of 4 methods. 2 to add Script files and Scripts to the list and 2 to get the lists when they should be rendered:

public interface IAppendedScriptsService {

    /**
     * Add a script file to the list of script files to append.
     *
     * @param scriptFile
     */
    public void addScriptFile(String scriptFile);

    /**
     * Add a script to the list of scripts to append.
     *
     * @param script
     */
    public void addScript(String script);

    /**
     * Returns a list with script files to append. Needs to be a list to preserve order of script files.
     *
     * @return list with script files to append.
     */
    public List
getScriptFiles();

    /**
     * Returns a list with scripts to append. Needs to be a list to preserve order of scripts.
     *
     * @return list with scripts to append.
     */
    public List
getScripts();
}

The implementation of the Interface could looks like the following block. Don't forget to set the scope to perthread.

@Scope(value = ScopeConstants.PERTHREAD)
public class AppendedScriptsService implements IAppendedScriptsService {

    private final List
scriptFiles = new ArrayList();
    private final List
scripts = new ArrayList();

    @Override
    public void addScriptFile(String scriptFile) {
        this.scriptFiles.add(scriptFile);
    }

    @Override
    public void addScript(String script) {
        this.scripts.add(script);
    }

    @Override
    public List
getScriptFiles() {
        return this.scriptFiles;
    }

    @Override
    public List
getScripts() {
        return this.scripts;
    }

}

Build the Component
The Component was easy to write. It consists of just one method to render the scripts:
    // Inject the service we just wrote.
    @Inject
    private IAppendedScriptsService appendedScriptsService;


    // This method is called when component should be rendered. (Markup writer infos)
    void beginRender(MarkupWriter markupWriter) {


        // Output script files.
        if (!this.appendedScriptsService.getScriptFiles().isEmpty()) {
            for (final String file : this.appendedScriptsService.getScriptFiles()) {
                // There might be another (tapestry conform way) to create the source link. My way is
                String fileUrl = "MyAssetsServerURL".resolveRelative(file);
                markupWriter.element("script", "type", "text/javascript", "src", fileUrl);
                markupWriter.end();
            }
        }


        // Output script snippets.
        if (!this.appendedScriptsService.getScripts().isEmpty()) {
            for (final String script : this.appendedScriptsService.getScripts()) {
                markupWriter.element("script", "type", "text/javascript");
                markupWriter.getElement().text(script);
                markupWriter.end();
            }
        }


    }

That's all to implement. Just one last step to make this run:

Activate Service in AppModule
To activate your Service, following method must be inserted into AppModule.java (or just insert the binder-line if there is already such a method):
public static void bind(ServiceBinder binder) {
  binder.bind(IAppendedScriptsService.class, AppendedScriptsService.class);
}
User Component
To use this Component, you just have to add this into a class of a page or component: 
@Inject
private IAppendedScriptsService appendedScriptsService;


/**
* Append JavaScripts
**/
void setupRender() {
    this.appendedScriptsService.addScriptFile("UrlToScript");
    appendedScriptsService.addScript("var x = 'cool';");
}
The order of scripts and script files is preserved.

Do you have any comments? Let's discuss this in the Nabble Forum. I posted the Topic: "Append JavaScript at the end of my html file" - Component for Tapestry 5.1
EDIT: Howard Lewis Ship commented in the Nabble Forum:
The correct approach is to modify the DocumentLinker service (which is internal) to place the

2010-10-22

Glaubwürdigkeit und das Web 2.0

How to Build Credibility on the Web beschreibt, wie man sich im Web ausdrücken sollte, um zum einen glaubhaft zu klingen und zum anderen aber auch aus der Masse des Contents im Web hervorzustechen. Hierbei ist es natürlich wichtig, das Interesse derjenigen auch zu halten, wenn man das Interesse einmal wecken konnte.

Viele Dinge, die in dem Artikel aufgeführt werden, halte ich für selbstverständlich, so dass ich hier nicht näher darauf eingehe - zum Beispiel sollte man immer ehrlich sein -, aber besonders erwähnenswert finde ich folgende zwei Punkte. Den ersten 'Profil', weil ich dabei immer etwas träge bin (wie man auch an meinem Profil erkennen kann). Den zweiten 'Netzwerke bilden', weil es hierbei in meinen Augen nicht einfach nur darum geht, alle die man kennt in seinem sozialen Netzwerk als Freund hinzuzufügen, sondern langfristig mit völlig neuen Leuten in Kontakt zu kommen, die sich mit den gleichen Dingen beschäftigen, wie man selbst.

Profil: Die "Über mich"-Seiten sollten gut ausgefüllt sein, wobei man nicht nur kurz seine Stadt angeben sollte, sondern auch Gründe, warum andere einem zu den Themen, über die man spricht, zuhören sollten.

Netzwerke bilden: Baue ein Netzwerk mit Leuten, denen du im Netz vertraust und die im selben Umfeld tätig sind.

2010-10-21

Online-Marketing Buzzwords

Um bei Gesprächen mit unserer Marketung-Abteilung auch mal zu wissen, wovon die so reden ;-) habe ich ein Buch über Online-Marketing gelesen.

In diesem ersten Teil liste ich alle Buzzwords auf, die mir in dem Buch über den Weg gelaufen sind. In einem zweiten Beitrag werde ich dann Stichworte zu einigen der Themenbereiche veröffentlichen.

Hier sind die Buzzwords, die man täglich so braucht:
  • Affililate-Marketung: Ein 'Advertiser/Merchant' schaltet Werbung auf der Website eines 'Affilialte/Publisher' und bezahlt diesem eine erfolgsabhängige Provision
  • Closed-Loop Opt-In: Rechtliche Absicherung beim Versenden von Newslettern. Empfänger muss neben der Zustimmung auf einer Webseite auch noch eine Email bestätigen. Erst dann werden ihm Newsletter und Werbemails geschickt.
  • Conversion Tracking: Misst die Effektivität, mit der Website-Besucher zu einer bestimmten Aktion, zB. einer Bestellung, gelenkt werden.
  • Empfehlungsmarketing: Kunden werben Kunden, bzw. Freunde werben Freunde.
  • Keyword-Advertising: Textanzeigen auf '->SERP', zB. mit Google AdWords
  • Keyword-Density: Dichte, mit der ein Schlüsselwort auf einer Webseite vorkommt.
  • OffSite-Optimierung: Verbesserung des '->Page Ranks' durch Maßnahmen außerhalb der eigenen Website, zB. durch Backlinks.
  • OnSite-Optimierung: Verbesserung des '->Page Ranks' durch Maßnahmen auf der eigenen Website
  • Organische Suchergebnisse: reine Ergebnisliste einer Suchmaschinen-Suche ohne jegliches '->Keyword-Advertising'
  • Page Rank: Ergebnisse einer Suchmaschinen-Suche sind eine geordnete Liste. Die Ordnung ergibt sich aus dem PageRank-Algorithmus. (nach Larry Page)
  • ROI (Return on Investment) - Kapitalrendite: Wie hoch ist die Rendite gemessen am eingesetzten Kapital?
  • SEO (Search Engine Optimization) - Suchmaschinenoptimierung: Verbesserung des '-> Page Ranks' durch '->Offsite-' und '->Onsite-Optimierung'
EDIT: In einem weiteren Post gehe ich auf meine Online-Marketing Notizen ein.

Neuer RSS Feed

Meine neue RSS-Feed-Adresse ist: http://feeds.feedburner.com/janp

2010-10-05

Design for Mobile: What Gestures do People Use?

Luke Wroblewski schreibt in seinem Blog Ideation + Design immer Kurzfassungen von Vorträgen, an denen er teilnimmt.
Relativ aktuell ist eine Stichpunktesammlung 'What Gestures do People Use?' vom Vortrag von Dan Mauney von der 'Design for Mobile'-Konferenz in Chicago IL.

Es geht hierbei um eine Untersuchung, welche Gestiken Nutzer bei mobilen Endgeräten verwenden. Die Versuchspersonen wurden beauftragt, verschiedene Operationen durchzuführen und hierbei beobachtet.

Besonders erwähnenswert finde ich folgende drei Punkte:


  • Viele Nutzer haben die gefragten Operationen in einem Menü gesucht, obwohl sie gebeten wurden, die Operationen durch Gestiken auszuführen.
  • Die Wischgestik ('swipe') wurde für diverse Operationen verwendet (löschen, multi-select, ausschneiden, scrolling). Es ist also fraglich, ob man beim Entwerfen einer mobilen Benutzerschnittstelle dieser Gestik eine eindeutige Funktion zuweisen kann.
  • Wenn User nicht genau wussten, wie sie eine Funktion erreichen können, haben sie ein Symbol (zum Beispiel ein Fragezeichen für Hilfe) auf den Screen gemalt. Gute Idee - ich glaube, dass ich da nicht drauf gekommen wäre.

2010-10-04

Tapestry5 in Eclipse

Seit einiger Zeit entwickle ich Tapestry 5 in Eclipse und es ist an der Zeit nach guten Plugins zur Unterstützung zu schauen. Bisher hat es nicht viel gegeben, aber heute starte ich eine neue Recherche.

Basis-Setup:
Borut Bolčina schreibt einen Blog über Tapestry 5. Dort hat er sehr ausführlich beschrieben, wie man das Basis-Setup seiner Entwicklungsumgebung macht.
Dort ist auch die Einrichtung von Eclipse Tidy beschrieben. Eclipse Tidy ist super, um HTML-Dateien zu formatieren, aber mit Tapestry gibt es das Problem, dass man ständig neue Komponenten entwickelt und diese mit t:myComponent in den TMLs referenziert. Jede neue Komponente muss man dann in den Eclipse Tiny-Einstellungen hinzufügen. Das kann - insbesondere bei vielen Entwicklern an einem Projekt - sehr nervig werden. Andererseits: Wenn man es gleich von vornherein durchzieht geht es vielleicht.

Code-Completion:
Einen immensen Umfang an Code-Templates findet man im Tapestry WikiTapestry5HowToEclipseCodeTemplates

Im Wiki findet man auch einen Beitrag über Code-Completion in TMLs. Das ist großartig!

Pugins:
Nun aber endlich zu den Plugins. Bisher habe ich loom-t5 von Chris Scheid und tapestry4e von Juan M. Salamanca gekannt und dabei wird es leider auch bleiben, da ich keine weiteren Plugins gefunden habe. In wie weit sich diese Plugins lohnen, schreibe ich im kommenden Blogpost.


Fazit:
Auch wenn ich leider keine neuen Plugins gefunden habe, welches mir eine Verbindung zwischen den TMLs und den Java-Klassen schafft - so dass zum Beispiel die in einer Klasse eingebundenen Komponenten, Properties, etc. im TML mit Code-Completion verfügbar sind: Es lohnt sich immer mal zu schauen, was es Neues gibt.