SEO: Das semantische Web – Web 3.0 – Internet im Jahr 2012/2013

19. September 2012 at 11:50

Immer wieder stolpert man über die Begriffe „Web 2.0“ und „Web 3.0“. Aber was steckt dahinter? Sind es nur neue Buzz-Wörter der Social-Media-Jugend?

Das Web 2.0

Mit Web 2.0 ist das heutige für die Benutzer weitestgehend interaktive Internet gemeint. Die Mehrzahl der Inhalte werden von den Anwendern generiert, nicht mehr primär statisch von den Webseitenbetreibern vorgegeben wie im „Web 1.0“. Als gute Beispiele sind Wikipedia, Youtube oder Facebook zu nennen. Ohne die von den Anwendern bei gesteuerten Inhalte wären diese Seiten nahezu nutzlos. Aber genau das Gegenteil ist der Fall, die Seiten erleben nahezu ein mega Boom, die Besucherzahlen sind enorm, die Akzeptanz sehr positiv und der Bekanntheitsgrad sehr hoch, weniger aktive Internet-Anwender kennen und nutzen diese Plattformen.

Web 3.0

Aber was ist jetzt das Web 3.0?

Das Web 3.0 ist ein semantisches Web. Die Daten auf der Webseite werden so gekennzeichnet, dass sie von Maschinen (zb Suchmaschinen wie Google.de) detailliert erkannt, kategorisiert und anschließend verarbeitet bzw angezeigt werden können. Aktuell können Maschinen die Daten zwar in der Summe einlesen, allerdings nicht immer detailliert trennen. Wir Menschen unterscheiden die verschiedenen Daten (zb Preis, Name eines Produktes, Beschreibung des Produktes, Artikel-Nr., etc.) durch die Formatierungen, Labels, Überschriften oder anhand anderer Kennzeichen.

Für zb Suchmaschinen ist diese Unterscheidung nicht ohne weiteres Möglich. Aus diesem Grund werden diese Daten explizit eindeutig gekennzeichnet, so das auch Maschinen diese erkennen. Hier ein Beispiel für ein semantische Kennzeichnung:

<stadt>Hannover</stadt> liegt an der <fluss>Leine</fluss>.<author>Daniel Briegert</author> hat diesen Text geschrieben.

Hierdurch ergeben sich viele positive Optimierungsmöglichkeiten, gerade im Umfeld der Suchmaschinenoptimierung (kurz: SEO).
Google selbst liest diese Daten bereits aus und stellt sie gesondert da. Primär über Rich Snippets (seit 2009).

Semantisches Web für SEOs

Welche Auszeichnungen über Rich Snippets sind aktuell am wichtigsten und damit für SEO ein „must have“?
Allgemein kann man sagen: „je mehr, umso besser und sei es nur um für die Zukunft gerüstet zusein!“. Nachteil ist allerdings ggf ein erhöhter Wartungsaufwand, ändern sich die Auszeichnungsstandards leider immer noch in unregelmäßigen Abständen bzw werde ergänzt oder ersetzt.

Aktuell kann die Auszeichnung von Bewertungen, Autoren und die Anzahl der Kommentare die Klickrate in den SERPS deutlich erhöhen, und das bei Gleichzeitig sinkender Absprungrate. Deshalb empfehle ich diese zu implementieren.

Semantische Auszeichnungen in Webshops

Neben der genannten Bewertungsauszeichnungen ist es sinnvoll bei Webshops gerade auf den Produktseiten die jeweiligen Produkteigenschaften auszuzeichnen.

Diese können sein:
Preis
Artikelnummer
rabattierter Preis
Hersteller
Größe
Farbe
Währung
Etc.

Allg. wichtig ist die Auszeichnung der jeweilig relevanten Eigenschaften folgender Seiten bzw Daten:

Events und Veranstaltungen
Produkte und Angebote
Bewertungen
Geschäfte, Restaurants und Organisationen
Filme, Bücher und Rezepte

Zur Auszeichnung empfiehlt sich das Microdata-Markup gemäß schema.org zu verwendet. Zur Validierung, ob das Markup korrekt implementiert wurde, empfehle ich das kostenlose Google Rich Snippet Testing Tool.

Ergänzende Artikel:

Wenn dir der Artikel gefallen hat bzw ein Mehrwert für dich war, wäre ich dankbar wenn du diesen Artikel in den Sozialen-Medien teilen und „liken“ könntest, danke!

Magento: Einzelne EAV-Attribute speichern

25. Mai 2012 at 17:22

Möchtet ihr bei einem Produkt, Bestellung, oder ähnlich in Magento ein Attribute speichern, so geht das in der Regel wie folgt (Bsp. an einem Produkt):

// Produkt laden
$product = Mage::getModel("catalog/product")->load(123);
// Attribut ändern
$product->setTitle("Asdf");
// Produkt speichern
$product->save();

Allerdings funktioniert das Speichern nicht an jeder Stelle, hinzu kommt das bei dem obigen Beispiel jeweils das gesamte Produkt inkl. alle Werte gespeichert wird. Da das EAV-Model ein komplexes Konstrukt ist, kann der Speichervorgang unnötig viele Ressourcen verschwenden.

Deshalb ist das Speichern einzelner Attribute direkt über das Resource-Model die bessere Wahl.
Hier am Beispiel des Produktes:

// Produkt laden
$product = Mage::getModel("catalog/product")->load(123);
// Attribut ändern
$product->setTitle("Asdf");
// geändertes Attribute über das Resource-Model des Produktes speichern
$product->getResource()->saveAttribute($product, "title");

Sollte euch der Artikel geholfen haben, so teilt diesen doch bitte bei Google+ und/oder Facebook!

Magento: Neue Collection anlegen / create new collection

11. April 2012 at 12:20

Um eine neue Collection in Magento anzulegen erstellt ihr eine entsprechende Datei in eurem Modul unter /Model/Mysql4/CollectionName/Collection.php welche die Klasse Mage_Core_Model_Mysql4_Collection_Abstract erweitert, z.b.:

class Namespace_OwnModule_Model_Mysql4_CollectionName_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
protected function _construct()
{
// your own code
}
}

Der Aufruf erfolgt dann über:

$collection = Mage::getModel('namespace_ownModule/')->getCollection();

Magento Code Snippet: Prüfen ob aktuelle Seite eine CMS, Category oder Produkt Seite ist

10. April 2012 at 15:02

Gelegentlich ist es notwendig zu prüfen von welchem Typ die aktuelle Seite ist.
Interessant dabei ist z.B. ob die aktuelle Seite eine Produkt-, Kategorie oder CMS-Seite ist.
Unter Anderem mit dem folgenden PHP-Code-Snippet könnt ihr dies prüfen:

if( Mage::registry('current_product') ) {
echo 'Product Page';
} else if( Mage::registry('current_category') ) {
echo 'Category Page';
} else if(Mage::registry('cms_page')) {
echo 'CMS Page';
}

Rich snippets: data-vocabulary.org vs schema.org

29. März 2012 at 17:10

Im Nachgang zum gestrigen Artikel SEO: Microformats vs RDF vs Mikrodata – Microformats oder RDF oder Mikrodata verwenden? möchte ich heute auf die sich zwangsweise ergebende Frage Auszeichnung nach „data-vocabulary.org oder  schema.org?“ eingehen.

Die Antwort ist einfach, wenn bekannt ist wofür RDF steht bzw. das RDF-Schema (RDF Vocabulary Description Language).
Daher, data-vocabulary.org ist für RDF zu verwenden, schema.org eher für mikrodata.

Weitere führende Infos bei wikipedia

SEO: Microformats vs RDF vs Mikrodata – Microformats oder RDF oder Mikrodata verwenden?

28. März 2012 at 18:01

Manch einer nennt Microformats und RDFa die stille Revolution bzgl. semantic web.

Aber was ist am besten? RDFa oder microformats? Wer sich mit der Implementation des semantischen Webs beschäftigt, und z.B. die Umsetzungsempfehlungen aus den Google Webmaster Richtlinien liest, merkt schnell das es verschiedene Wege zur Umsetzung gibt. Aber was ist der besser Weg?

Die Antwort ist nicht so einfach.

Microformats

Gegründet wurde die ursprüngliche Bewegung unter dem Namen microformats.org und der zugehörigen Website im Juni 2005. Die Gründer waren Dan Cederholm und Tantex Çelik. Letzterer ist bei vielen Webentwicklern für seine teilweise hochkomplexen Internet-Explorer-Hacks bekannt, die mit den diversen Kommentarmöglichkeiten spielen. Tantek Çelik hat allerdings auch für Microsoft und Technorati gearbeitet.

Das Besondere an den Microformats von microformats.org ist, dass sie keine neuen Technologien und Standards benötigen. Sie verwenden vollständig die Funktionalität von XHTML. Während die Microformats also quasi jederzeit eingeführt werden konnten, schlug sich das eigentliche semantische Web mit komplexeren Problemen herum. Schon seit vielen Jahren gab es Bemühungen, Bedeutung in Tag-basierte Sprachen zu mischen.

Microformats (oder zu deutsch “Mikroformate”) verwenden bekannte HTML Attribute wie “class” und Hierarchien, um Auszeichnungen aus einer fest definierten Auswahl vor zu nehmen.

Vorteile

  • Einfach
  • Führt keine neuen HTML-Attribute ein, gültiges HTML4.

Nachteile

  • Nur eine fest definierte Auswahl an Formaten, nicht erweiterbar.
  • Keine definierte API zur Extraktion der Daten.
  • Keine definierte Internationalisierungs-Unterstützung.
  • Die Verwendung von “class” kann zu Konflikten mit CSS-Definitionen führen.

Microformats Beispiel

<p class="vcard">
<a class="fn email" href="mailto:mail@fly2mars-media.de">Vorname Name</a> arbeitet als
<span class="role">SEO-Berater</span> für
<span class="org">Fly2Mars-Media.de</a>.
</p>

RDF

RDFa erweitert den HTML-Standard um RDF-Daten in (X)HTML-Dokumente einzubetten.

Der vielleicht wichtigste Ansatz ist RDF, das Ressource Description Framework. Dabei handelt es sich nicht um einen Standard, sondern um eine ganze Standard- Familie. Verwaltet wird sie – wie HTML und XHTML – vom W3C. RDF bietet im Grunde eine Beschreibung von Objekten.

Ursprünglich hauptsächlich für Metadaten gedacht, wurde der Ansatz bald auf alle Arten von Daten ausgeweitet. Da RDF selbst allerdings recht umfangreich ist und nicht direkt mit Websites interagiert, hat das W3C den Microformats-Gedanken aufgegriffen und mit RDFa eine einfache RDF-Variante für die Integration in XHTML geschaffen.

Vorteile

  • Maximale Flexibilität, umfangreich erweiterbar, um eigene Vokabularien zu definieren.
  • Erlaubt Mashups verschiedener Vokabularien.
  • Prefixe erlauben kompakteren Code da URLs nicht immer voll ausgeschrieben werden müssen.
  • Erlaubt die beliebige Verkettung von Elementen.
  • RDFa Dom API

Nachteile

  • Hohe Komplexität.
  • Auf XML und XHTML ausgerichtet, wenn auch mittlerweile in HTML5 einbettbar.
  • Führt 8 neue HTML-Attribute ein.

RDF Beispiel

<p xmlns:v="http://rdf.data-vocabulary.org/#" typeof="v:Person">
<a href="mailto:mail@fly2mars-media.de" rel="v:url" property="v:name">Vorname Name</a> arbeitet als
<span property="v:role">SEO-Berater</span> für
<span property="v:affiliation">Fly2Mars-Media</span>.
</p>

Microdata

Microdata ist eine Erweiterung für HTML5, um semantische Annotationen einzubetten.

Vorteile

Nachteile

  • Erlaubt keine mehrfachen Eigenschaften für Elemente, wie z.B. Email und Name in einem einzigen Link-Element.
  • Führt 5 neue HTML-Attribute ein.

Mikrodata Beispiel

<p itemscope itemtype="http://schema.org/Person">
<a itemprop="email" href="mailto:mail@fly2mars-media.de">
<span itemprop="name">Vorname Name</span>
</a> arbeitet als <span itemprop="jobTitle">SEO-Berater</span> für <span>fly2mars-media.de</a>.
</p>

Fazit

RDF wird gut von Google erkannt, bietet mehr Möglichkeiten als Microformats. Validiert werden können die Seiten mit dem Rich Snippets Testing Tool von Google. Google empfiehlt Mikrodata, wohl auch weil mehr HTML5.

Deshalb verwende ich jetzt RDF und Mikrodata.

Google unterstützt Rich Snippets in der Anzeige der Suchergebnisse (SERPs). Neben Microformats und RDFa wird auch Microdata unterstützt, letzteres ist dabei das bevorzugtes Format und von Google empfohlen. Auf  Schema.org befindet sich eine gute Dokumentation, diese sollte befolgt werden.

Eure Erfahrungen & Ergänzungen?

Her damit, aktuell spannendes Thema, neben Bewertungen, Autoren-Infos, Kontaktdaten, etc. lässt sich vieles damit so auszeichnen das die Daten richtig von den Suchmaschinen (oder anderen Maschinen lesbaren Geräten) richtig erkannt und verarbeitet werden können. Web 3.0 kann kommen! 🙂

php mail bzw. sendmail temporär umleiten zu dev/null – email versand unterbinden von php / sendmail

26. März 2012 at 17:59

Ihr möchtet den Versand von E-Mails durch php bzw. sendmail unterbinden?

Dafür gibt es verschiedene Möglichkeiten, z.B. könnt ihr ein alias einrichten, einfach in der Datei

/etc/aliases

ein bestimmten user eintragen sowie das Ziel, also:

bestimmteruser:         /dev/null

Alternativ in php den sendmail_path zu /dev/null umbiegen und auch den Port „umbiegen“.
Tragt hierzu am Anfang eures Scriptes (z.B. index.php) folgende Zeilen ein:

<?php
ini_set("sendmail_path", "/dev/null");
ini_set("smtp_port","26");
?>

Rich Snippet erfolgreich implementieren am Beispiel der Bewertungen

26. März 2012 at 17:22

An dem folgenden Beispiel wird die Implementation der Sterne-Bewertung in Rich Snippet gezeigt.
Mit Hilfe dieser werden die Bewertungen in Form von Sternen in den Google SERPS angezeigt, wie im folgenden Bild gezeigt:

rich snipped beispiel in den google serps

Die Funktionen sind frei erfunden, anhand des Namen ist zu erkennen welcher Wert an dieser Stelle dynamisch generiert werden sollte bzw. dem Kommentar dahinter als Bsp.! 😉

<!-- begin rating rich snippet -->
<span style="visibility:hidden;" xmlns:v="http://rdf.data-vocabulary.org/#" typeof="v:Review-aggregate">
<span rel="v:rating">
<span property="v:value"><?php echo $this->getDerProzentualeBewertungsWert(); //z.B. 90%  ?></span>
</span>
<span property="v:best">5.00</span>
<span property="v:votes"><?php echo $this->getAnzahlDerBewertungen(); //z.B. 9  ?></span>
</span>
<!-- end rating rich snippet -->

SEO optimierte 404-Fehler-Seiten in Magento – 404 error page in magento

21. März 2012 at 17:47

Bei der Migration / Relaunch eines bestehenden Webshops zu Magento oder bei Änderungen der Link-Struktur, Kategorien, CMS, etc. innerhalb Magentos, kann es beim Aufruf alter ungültiger Links zu einer 404-Fehlerseite kommen. Das ist weder für die Besucher, noch aus SEO-Gesichtspunkten optimal. Jeglicher Link-Juice würde so abhanden kommen, mögliche Käufer verschreckt, die Conversion sinkt unnötig.

Standardgemäß wird in Magento die unter Admin-Backend unter „System > Konfiguration > Web > Standardseiten > CMS keine Route Seite“  definierte Seite aufgerufen, allerdings wird dann bei einem Aufruf einer ungültigen Seite/URL der Header Statuscode 404 ausgeliefert. Hierdurch geht der Link-Juice auf diese Seite verloren was sich negativ auf das Google-Rankings auswirkt.

Eleganter ist es meiner Meinung nach, alle nicht mehr vorhandenen Seiten direkt per 301-Redirect, entweder auf die ermittelte (Unter-)Kategorie-Übersichtsseite, notfalls auf die Startseite weiter zu leiten.

Aus diesem Grund ist es notwendig den Magento eigenen NoRoute-Controller durch ein eigenes Modul zu überschreiben.

Die Magento noRouteAction befindet sich in der Klasse /app/code/core/Mage/Cms/controllers/IndexController.php .
Diese Klasse erweitern wir durch ein eigenes Module unter app/code/local/Fly2marsmedia/Redirect

Im Ordner „Redirect“ wird das Verzeichnis „etc“ und „controllers“ angelegt. Im Ordner „etc“ legt ihr die Datei config.xml an mit dem folgenden Inhalt:

<?xml version="1.0"?>
<config>
<modules>
<Fly2marsmedia_Cms>
<version>0.0.1</version>
</Fly2marsmedia_Cms>
</modules>
<frontend>
<routers>
<fly2marsmedia_cms>
<use>standard</use>
<args>
<module>Fly2marsmedia_Cms</module>
<frontName>redirect</frontName>
</args>
</fly2marsmedia_cms>
<cms>
<args>
<modules>
<Fly2marsmedia_Cms before="Mage_Cms">Fly2marsmedia_Cms</Fly2marsmedia_Cms>
</modules>
</args>
</cms>
</routers>
</frontend>
</config>

Anschließend legt ihr im Ordner /controllers die Datei IndexController.php mit folgendem Inhalt ab:

class Fly2marsmedia_Cms_IndexController extends Mage_Cms_IndexController
{
public function noRouteAction($coreRoute = null)
{
  $path = '/';
  $targetUrl = Mage::getUrl($path);
  if($targetUrl != '') {
  Mage::app()->getFrontController()
  ->getResponse()
  ->setRedirect($targetUrl, 301)
  ->sendResponse();
  exit();
}
return $this;
}
}

Final muss das Module noch aktiviert werden. Dazu im Ordner /app/etc/modules eine Datei Namens Fly2marsmedia_Redirect.xml mit folgendem Inhalt ablegen:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<modules>
<Fly2marsmedia_Template>
<active>true</active>
<codePool>local</codePool>
</Fly2marsmedia_Template>
</modules>
</config>

Magento Coding Tipps: Filter kombinieren mit addAttributeToFilter-Funktion

6. März 2012 at 16:34

Beim Aufruf der Collection in Magento sollen 2 Attribute kombiniert werden?

In diesem Beispiel zeige ich euch wie ihr das ein Filter auf OR „is null“ and „eq“ => array() kombinieren könnt.

Im Detail erfolgt eine OR-Verknüpfung der folgenden 2 Abfragen:
$collection->addAttributeToFilter(‚attributename‘, array(‚is‘ => null));
$collection->addAttributeToFilter(‚attributename‘, array(110,111));

So dass sich die folgende ergibt:

$collection->addAttributeToFilter(
 array(
   array(
     'attribute' => 'name_of_attribute_1',
     'null' => 'this_value_doesnt_matter'
     ),
   array(
     'attribute' => 'name_of_attribute_2',
     'in' => array(110, 111)
   )
 )
);