Archive for the ‘Werkzeuge’ Category

Jan Kutschera hat auf seinem SEO Punk Blog eine sehr leicht nachvollziehbare Anleitung veröffentlicht, wie man mit Google Analytics “sehen” kann, was die Suchenden bei Google tatsächlich eingegeben haben und zu was sie sich dann von Google Suggest haben überreden lassen tatsächlich zu suchen…

Da dies aber über Google-Analytics Filter läuft, und also nur ab dem Moment der Erstellung dieser Filterfunktion erfasst wird, dauert es – je nach Suchvolumen das eine Site abbekommt – u.U. relativ lange, bis man ein statistisch relevantes Datenvolumen gesammelt hat.

Das, und dass, wahrscheinlich ja nicht jeder überhaupt Google Analytics einsetzt, hat mich dazu bewegt, doch mal zu sehen, ob man nicht doch noch eine ex-post Auswertung über die Server-Logfiles hinbekommt, und bin zu folgendem Ergebnis gelangt:

Annahmen:
das Webserver Logfile heisst: access_log (default bei apache)
und hat das LogFormat combined: (“%h %l %u %t \”%r\” %>s %b \”%{Referer}i\” \”%{User-Agent}i\”" – ist i.d.R. auch so defaultmäßig eingestellt)

Als erstes extrahieren wir mit egrep alle Logeinträge, die als Referrer eine Google Suche haben:

egrep ‘”http://([^\./]+\.)*google\.’ access_log > google-search

im nächsten Schritt dampfen wir die Informationen so ein, dass wir nur noch die Landingpage und den Referrer (ohne das http://) getrennt durch ein Leerzeichen in jeder Zeile stehen haben.

sed ’s/^[^"]*”GET \([^ ]*\) [^"]*”[^"]“http:\/\/\([^"]*\)”.*$/\1 \2′ <google-search >google-search-stripped

so, und hierüber lassen wir nun ein kleines php-script laufen, das uns die Informationen in zwei MySQL-Tabellen einträgt :

<?php
$conf[‘dbserver’] = ‘localhost’;
$conf[‘database’] = ; // Datenbank-Name
$conf[‘dbuser’] = ; // Datenbank-UserID
$conf[‘password’] = ; // Datenbank-Passwort
$conf[‘tableprefix’] = ‘gsx_’;
$conf[‘filename’] = ‘google-search-stripped’;
 
$IN = fopen($conf[‘filename’],‘r’);
 
$dbconn = mysql_connect($conf[‘dbserver’], $conf[‘dbuser’], $conf[‘password’]) OR die(mysql_error());
 
mysql_select_db($conf[‘database’]) OR die(mysql_error());
 
$sql = sprintf(‘DROP TABLE IF EXISTS %squeries, %sparms’,$conf[‘tableprefix’],$conf[‘tableprefix’]);
mysql_query($sql) OR die(mysql_error());
$sql = sprintf(‘CREATE TABLE %squeries (id bigint AUTO_INCREMENT PRIMARY KEY, landingpage text, googledomain varchar(25), querystring text, q text, hl varchar(3) DEFAULT NULL, aq varchar(3) DEFAULT NULL, oq text DEFAULT NULL, cd varchar(3) DEFAULT NULL, start varchar(4) DEFAULT NULL, aqi varchar(3) DEFAULT NULL)’,$conf[‘tableprefix’]);
mysql_query($sql) OR die(mysql_error());
$sql = sprintf(‘CREATE TABLE %sparms (id bigint, parm varchar(15) NOT NULL, val varchar(255))’,$conf[‘tableprefix’]);
mysql_query($sql) OR die(mysql_error());
 
while (!feof($IN)) {
   $line = fgets($IN, 4096);
   list($landingpage, $referrer) = split(‘ ‘,$line);
   list($googledom, $querystring) = split(\?,$referrer);
 
   $sql = sprintf(‘INSERT INTO %squeries (landingpage, googledomain, querystring) VALUES ("%s", "%s", "%s")’,$conf[‘tableprefix’],$landingpage,$googledom,$querystring);
   mysql_query($sql) OR die(mysql_error());
   $id = mysql_insert_id();
 
   $parmpairs = split(‘&’,$querystring);
   foreach ($parmpairs as $parmpair) {
      list($parm,$value) = split(‘=’,$parmpair);
      $parms[$parm] = $value;
 
      $sql = sprintf(‘INSERT INTO %sparms (id, parm, val) VALUES (%d, "%s", "%s")’,$conf[‘tableprefix’],$id, $parm,$value);
      mysql_query($sql) OR die(mysql_error());
      switch($parm) {
         case ‘q’:
         case ‘hl’:
         case ‘aq’:
         case ‘oq’:
         case ‘cd’:
         case ’start’:
         case ‘aqi’:
            $sql = sprintf(‘UPDATE %squeries SET %s = "%s" WHERE id=%d’,$conf[‘tableprefix’],$parm,$value,$id);
            mysql_query($sql) OR die(mysql_error());
            break;
         default:
            break;
      }
 
      $parmcount[$parm]++;
   }
}
fclose($IN);
mysql_close($dbconn);
asort($parmcount);
var_dump(array_reverse($parmcount));
?>

Jetzt haben wir alle Daten in den Tabellen. Die für die Google-Suggest Betrachtung interessantesten Google-Parameter
(q = (Query) der Suchstring nachdem tatsächlich gesucht wurde,
hl = Sprache in der gesucht wurde,
oq = (Original Query) das was der User eingegeben hat, bevor er einen Suchvorschlag ausgewählt hat,
aq = (Assited Query) Position des Suchvorschlags in der Suchvorschlagsliste – beginnend mit 0 – und ggf. mit zusätzlichen Infos erweitert,
cd = Ranking Position der eigenen Landingpage in den Suchergebnissen,
start = “Ergebnis-Seiteninformation”,
aqi = ? (vielleicht Assisted Query Index?) – hier stehen so werte wie ‘g2′, ‘g10′ drin – meine sehr unsichere Vermutung: Anzahl der Suchvorschläge in der Suchvorschlagsliste)
haben wir auch direkt in der Haupt-Tabelle, so dass die ersten einfachen SQL-Queries sich nur auf diese Tabelle beschränken können:

Bspl: Liste der Landingpages, Queries, Position des Suchvorschlags in der Suchvorschlagsliste, die Original Suche, und die Häufigkeit für alle Assisted Queries, d.h. die Suchen bei denen Google Suggest verwendet wurde:

SELECT landingpage, q, aq, oq, count(*) as anzahl FROM gsx_queries WHERE aq IS NOT NULL AND aq != ‘f’ AND aq != ‘t’ GROUP BY landingpage, q, aq, oq ORDER BY anzahl DESC, aq ASC, oq ASC

Natürlich gibts das Ganze auch zum Download.

(Für Linux-Kisten dürften alle Tools (grep, sed, php, mysql) bereits vorhanden sein. Für die Auswertung empfiehlt es sich z.B. phpMyAdmin installiert zu haben :-) .

Wenns denn mit Windows sein muss (Scripte nicht getestet!): hier findet man die entsprechenden Tools: grep, sed, php, MySQL)

Noch ein Wort zum Abschluß: Im Vergleich zur Analyse mit einem Web-Analyse-Tool ist dies in vielen Aspekten unterlegen, aber für eine erste Analyse was man eigentlich wirklich messen kann und möchte ist mir eine solche Script-Lösung immer recht hilfreich, da man mit so etwas sehr flexibel – wenn auch nicht besonders komfortabel – in den Daten stöbern kann…

…und wie immer: Kommentare und Verbesserungsvorschläge jederzeit willkommen :-)

Weitere Artikel zum Thema Google Suggest: FridayNite, Sistrix, Jojo, Bastian, …

Tweet this via redir.ec

[Slashdot] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]
4
Mai

Platz 1 König bei Google

   Posted by: seoxplorer

Wer rankt in Google auf Platz Eins?

Diese Frage stellte sich Stefan Fischerlander auf seinem Blog Suchmaschinen-Tricks. Basierend auf seiner Keyword-Datenbank untersuchte er die 10000 häufigsten gesuchten Begriffe in Detuschland.

Wenn es alleine um Platz 1 bei Google geht ist wikipedia unumstrittener König, bei fast einem Viertel (24,57%) aller Suchbegriffe bietet Google als erstes eine Seite von de.wikipedia.org dem Suchenden an. Platz 2 mit gerade noch einem Prozent (1,07%) erreicht die englische Schwester (en.wikipedia.org), was zeigt wie start insgesamt doch auch englische Begriffe in Deutschland gesucht werden. Platz 3, und damit den besten Platz der kommerziellen Websites belegt www.amazon.de mit gerade noch 0,65% der 10.000 meistgesuchten Begriffe.

Da Stefan so nett ist und auch die Ergebnisliste der Plätze 1-1000 als Excel Tabelle zur Verfügung zu stellen, habe ich noch ein wenig geschaut wie denn die Mengenmäßige Verteilung aussieht, und ob auch hier das bei Rankings häufig herangezogene Pareto-Prinzip (die Top 20% haben 80% aller Werte) gilt (mehr zur Pareto-Verteilung und dem Pareto Prinzip, na wo wohl? bei http://de.wikipedia.org/wiki/Pareto-Verteilung :-) ), und herausgekommen ist dies:

AnzahlErstplazierungen AnzahlWebsites
2457 1
107 1
65 1
41 1
35 1
32 1
30 1
26 1
22 1
21 1
20 1
18 2
17 1
16 1
15 1
14 2
13 2
12 6
11 5
10 9
9 8
8 17
7 20
6 22
5 43
4 74
3 223
2 553

Also 85% der Top 1000 Websites ranken gerade mal für 2, 3 oder maximal 4 Suchbegriffe auf Platz 1 und zeichnen damit für 20,71% der Top 1 Plazierungen verantwortlich, also am “unteren” Ende kommt das Pareto-Prinzip dann doch tatsächlich schon fast wieder hin. Lässt man die 4er auch noch raus so ergibt sich, dass 77,6% der Top 1000 Websites nur für 2 oder 3 Suchbegriffe Platz 1 bei Google erreichen, und damit 17,75% der Top 1 Platzierungen beanspruchen…

Insgesamt sehr interessante Statistiken, die uns da zur Verfügung gestellt werden… und ich denke ich werde noch die eine oder andere Auswertung daraus machen und hier veröffentlichen…

Tweet this via redir.ec

[Slashdot] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

Section #1: Speed!

Install WP Super Cache
Move .htaccess directives to your server config (if possible!)
and disable .htaccess parsing!

Combine CSS files into one big CSS file
Same goes for JavaScript, which should be loaded in the footer

Use CSS sprites
Ask your developer if you don’t know what this is.

Add a PHP opcode cache

Kill some plugins…
And try to replace them for similar ones. Some plugins are god awful

Still slow? Switch to better hosting.
West-Host (aff link)

Set Pretty Permanlinks
Why do people still forget this?
Make Categories short (add post-id in URL if using Google-News)

Switch Blog name and Post Title
The format should be post-title – blog-title

Give Robots directions
Noindex wp-admin, login, and register pages etc.

Write better titles
Use HeadSpace2, or even All in one SEO (HeadSpace2 rocks)

Create proper pagination
using wp-pagenavi by Lester Chan, f/i.

Disable paged comments
They suck.

Read&IMplement everything in my WP seo guide

Sect #3 Maintenance

Backup your database every few hours
Use Lester Chans WP-DBM-Manager plugin

Optimize your database every day
also WP-DBManager plugin
remove spam-comments regularly

Backup you files every day
Use Wordpress Backup:
www.blogtrafficexchange.com/wordpress-backup

Check your Queries
Use the debug Queries plugin to check for plugins gone mad
http://wordpress.org/extended/plugins/debug-queries/

Run Akismet
Kill those spam comments.

Check the referrers for comments
http://tools.davidnaylor.co.uk/

Remove those nonsense widgets
Technorati rank? Well…. OK
Blog value: nonsense.

Track your uptime
Use Pingdom, or another tool, but be the first to know when your blog is down.

Check 404’s
Use the 404 notifier:

wordpress.org/extend/plugins/404-notifier/ and fix them using Redirection (plugin)

Remove unneccesary meta info

remove_action (‘wp-head’, ‘rad-link’);

‘wlwmanifest_link’

‘wp_generator’

Section #4 Social

Allow& encourage people to submit your content (Use Sociable, damn it ;-)

Doing newsletter?
Add a refer a friend button on the thank you page
Or… Use my Comment Redirect plugin, and add the refer a friend there!

Use WP Greet Box, even useful on “normal” sites
Very useful (knows referer)

Make sure your comments are gravatar enabled.!! (do google search on how to…)

Do the Twitter thing. It’s an absurd traffic driver.

Use Google Analytics (and my plugin for it)

Use RSS link tagger (rebelic.nl/rsslinktagger)

Track traffic coming from Twitter yoast.com/twitter-analytics/

Install canonical URLs so your Analytics doesn’t interfere with your SEO

Use comment redirect to track first time commenters (make thankyou page as Goal in Google Analytics)

Use on onclick javascript with a minor delay to track all comments as goal

Track RSS subscribers the same way

(feedburner very unreliable at this time)

Start optimizing:
which traffic leads to more subscribers?
And yes that means forgetting about Digg.

Use my blog metrics plugin
Improve yourself each month!

Addition: Original slides of the 40 Tips for WordPress Optimization are now online

Tweet this via redir.ec

[Slashdot] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]
Seite 2 von 4123...Ende »