xt:Commerce Content Informationen erweitern
Was fällt auf wenn man eine Contentseite in einem xt:Commerce aufruft, der nicht suchmaschinenoptimiert ist? Irgendwie stimmen alle Meta-Informationen (wie Meta-Description, Meta-Title und Meta-Tags) exakt mit denen von der Hauptseite überein.
Was sagt uns der SEO-Geist? Das ist schlecht - weil alle Seiten den gleichen Titel haben und eine Suchmaschine keine Chance hat auch andere Content-Elemente zu indexieren. Jetzt fragt man sich "Ist das denn so schlimm mit den Meta-Informationen von xt:Commerce?". Kurz Antwort - Ja, ist es. Denn wenn man die Suchergebnisseiten der Suchmaschinen betrachtet, sieht man bei den Ergebnissen immer wieder dass der Titel der Seite und die Description ausgegeben wird. Keywords werden durch Fettschrift hervorgehoben. Allein das sollte doch ein Grund sein, dass wir unserem xt:Commerce Shopsystem etwas mehr Aufmerksamkeit schenken, oder?
Wie gehen wir es jetzt an, dass wir unserem Content auch individuelle Meta-Informationen hinzufügen können? Wie in einem vorherigen Post zum Thema nofollow-Links in xt:Commerce gehen wir hier hier ähnlich vor:
- wir modifizieren die Datenbank
- wir modifzieren die Eingabe
- wir modifizieren die Ausgabe
Nur das wir diesmal die Template-Dateien außen vor lassen.
!!! Wichtig: Macht bitte unbedingt von allen Dateien die Ihr modifiziert ein Backup. Ich enthalte mich jeder Verantwortung, wenn Ihr Fehler einbaut. Mit einem Backup von Datenbank und Dateien beugt Ihr einem Shop-Ausfall vor. Zumal man eh erst lokal testet
!!!
Vorbereiten und modifizieren der Datenbank
Zu aller erst müssen wir erst einmal unsere xt:Commerce Datenbank mit einem Tools unserer Wahl für die bevorstehende Modifikation vorbereiten. Wir brauchen insgesamt 2 neue Felder in der Tabelle content_manager. Wir loggen uns z. B. in phpmyadmin ein und führen folgende Anweisung aus :
ALTER TABLE `content_manager` ADD `content_tags` VARCHAR( 255 ) NOT NULL , ADD `content_desc` VARCHAR( 255 ) NOT NULL ;
Bearbeiten der content_manager.php
Wie schon bei den nofollow Links werden wir auch hier wieder die content_manager.php aus dem Admin-Ordner bearbeiten, da ja auch noch die Eingabe komplett fehlt. Dies wollen wir hier nachholen und xt:Commerce etwas tunen. Die Änderungen werde ich von oben nach unten beschreiben, damit wir nicht allzu oft in der Datei hin und Herspringen müssen. Ich denke das bleibt dann am Ende übersichtlicher.
Wer schon meine Modifkation mit dem NoFollow Link eingebaut hat, sollte ca. in Zeile 75 den Bereich mit dem seo-geek.de Code finden. Falls nicht legen wir die Zeilen neu an. Wie auch immer, gegen Zeile 60 werden die POST-Variablen in lokale PHP Variablen umgewandelt und für die Datenbank vorbereitet. Da wir kein Risiko eingehen wollen, werden wir unsere Eingaben auch validieren lassen. Wir fügen hier also folgenden Code ein:
$metatags = xtc_db_prepare_input($_POST['cont_tags']);
$description = xtc_db_prepare_input($_POST['cont_desc']);
Mit diesen beiden Zeilen werden unsere übergebenen Variablen (folgen weiter unten) in PHP-Variablen gespeichert und validiert bzw. es werden Fremdzeichen bzw. HTML-Steuerzeichen entfernt.
Weiter geht es ca. in Zeile 125, zu erkennen am Kommentar "// update data in table". da unsere Änderungen im Content von xt:Commerce gespeichert werden sollen, müssen wir an dieser Stelle im Code die Anweisung anpassen. Wir fügen also am Ende genau 2 Zeilen hinzu, die für die MetaTags und für die Meta-Description zuständig sind. Das ganze sieht dann in etwa so aus (mit NoFollow-Mod):
$sql_data_array = array(
'languages_id' => $content_language,
'content_title' => $content_title,
'content_heading' => $content_header,
'content_text' => $content_text,
'content_file' => $content_file_name,
'content_status' => $content_status,
'parent_id' => $parent_id,
'group_ids' => $group_ids,
'content_group' => $group_id,
'sort_order' => $sort_order,
'file_flag' => $file_flag,
'nofollow' => $nofollow, // seo-geek.de Änderung
'content_tags' => $metatags, // seo-geek.de Änderung
'content_desc' => $description // seo-geek.de Änderung
);
Mit diesen Befehlen übergeben wir dem Handler für die SQL-Anweisungen alle nötigen Daten die benötigt werden um die eingegebenen Informationen korrekt in die xt:Commerce Datenbank abzuspeichern.
Gegen Zeile 170 ändern wir den Code wieder so ab, dass die POST-Variablen in lokale Variablen gewandelt werden. Vom Prinzp her wie der Schritt gerade eben. Zur Sicherheit poste ich hier noch einmal den Code (mit Nofollow-Mod):
// Anfang seo-geek.de Änderung
if ($_POST['nofollow'] == true){
$nofollow = 1;
}
else {
$nofollow = 0;
}
$metatags = xtc_db_prepare_input($_POST['cont_tags']);
$description = xtc_db_prepare_input($_POST['cont_desc']);
// Ende seo-geek.de Änderung
Gegen Zeile 250 passen wir wieder einmal den Query für SQL an, diesmal aber für Product Content. (Falls das einer benutzen sollte - ich werde darauf aber in diesem Post noch nicht weiter eingehen, da ich mich damit noch nicht befasst habe)
Jetzt kommen wir langsam zur Eingabe, vorher gehen wir im Code aber noch sicher, dass wenn was eingegeben wurde, dies auch wieder angezeigt wird und ggf. bearbeitet werden kann Dazu müssen wir erstmal den SQL-String zum Laden der Content-Daten etwas modifizieren, damit xt:Commerce damit auch umgehen kann. Den besagten String finden wir gegen zeile 439, beginnend mit $content_1=array();
Hier ergänzen wir unsere neu eingegebenen Datenfelder, sowie die Zuweisung der Variablen. Das Ergebnis sieht folgendermaßen aus:
$content_1=array();
$content_1_query=xtc_db_query("SELECT
content_id,
categories_id,
parent_id,
group_ids,
languages_id,
content_title,
content_heading,
content_text,
file_flag,
content_file,
content_status,
content_delete,
content_tags,
content_desc
FROM ".TABLE_CONTENT_MANAGER."
WHERE languages_id='".$i."'
AND parent_id='".$content[$ii]['CONTENT_ID']."'
order by sort_order
");
while ($content_1_data=xtc_db_fetch_array($content_1_query)) {
$content_1[]=array(
'CONTENT_ID' =>$content_1_data['content_id'] ,
'PARENT_ID' => $content_1_data['parent_id'],
'GROUP_IDS' => $content_1_data['group_ids'],
'LANGUAGES_ID' => $content_1_data['languages_id'],
'CONTENT_TITLE' => $content_1_data['content_title'],
'CONTENT_HEADING' => $content_1_data['content_heading'],
'CONTENT_TEXT' => $content_1_data['content_text'],
'SORT_ORDER' => $content_1_data['sort_order'],
'FILE_FLAG' => $content_1_data['file_flag'],
'CONTENT_FILE' => $content_1_data['content_file'],
'CONTENT_DELETE' => $content_1_data['content_delete'],
'CONTENT_STATUS' => $content_1_data['content_status'],
'CONTENT_TAGS' => $content_1_data['content_tags'],
'CONTENT_DESC' => $content_1_data['content_desc']);
}
Wer noch keine nofollow-Modifikation vorgenommen hat, denkt sich die Zeile mit nofollow, einfach weg. Wir wählen im ersten Teil nur die Datenfelder aus, die wir für die Anzeige benötigen. In diesem Fall so ziemlich alle Felder. Weiter unten (ca. Zeile 530) müssen wir wieder ein paar SQL-Abfragen anpassen. Diesmal für Abfragen welche bei einem Aufruf zum Editieren stattfinden werden. Wir ändern den Block also folgendermaßen ab:
$content_query=xtc_db_query("SELECT
content_id,
categories_id,
...
content_status,
content_group,
content_delete,
nofollow,
content_tags,
content_desc
FROM ".TABLE_CONTENT_MANAGER."
WHERE content_id='".(int)$_GET['coID']."'");
User welche noch keine NoFollow-Modifkiation vorgenommen haben besitzen zu 99 % noch kein Feld mit nofollow und müssen dieses weglassen.
Die Eingabe unserer Content-Metadaten in xt:Commerce
Jetzt haben wir alle Daten soweit eingebunden, fehlt nur noch eins - wir müssen die ja auch eingeben. Jetzt wird es etwas hakelig, denn wer etwas Erfahrung mit HTML hat, sieht, dass der Code sehr viele Tabellen und Tabellenfelder besitzt. Wir müssen also aufpassen, dass wir an der richtigen Stelle unseren Code einfügen, bevor das Gerüst zerbricht. Wir benötigen zum Eingeben 2 Textfelder, je eines für Meta-Keywords und Meta-Description. User welche die seo-geek.de-Nofollow-Modifikation haben, besitzen bereits selbst eingefügten Code und können dort weiter einfügen. Wer noch keine Modifikation vorgenommen hat, sucht sich die Stelle raus, in der das Textfeld für die Produktbeschreibung generiert wird. Wir suchen uns folgenden Part heraus und Ändern es folgendermaßen ab:
<tr>
<td width="10%" valign="top"><?php echo TEXT_CONTENT; ?></td>
<td width="90%">
<?php
echo xtc_draw_textarea_field('cont','','100%','35',$content['content_text']);
?>
</td>
</tr>
Nach dem
fügen wir jetzt unsere Eingabefelder hinzu. Dazu bedienen wir uns der von xt:Commerce vordefinierten Funktion xtc_draw_input_field und übergeben einen Feldnamen, den (bisherigen) Inhalt und eine Feldgröße.
// Anfang Code seo-geek.de
<tr>
<td width="10%">Meta-Tags</td>
<td width="90%"><? echo xtc_draw_input_field('cont_tags',$content['content_tags'],'size="150"');?></td>
</tr>
<tr>
<td width="10%">Meta-Description</td>
<td width="90%"><? echo xtc_draw_input_field('cont_desc',$content['content_desc'],'size="150"');?></td>
</tr>
// Ende Code seo-geek.de
Wer das ganze noch für die Product Contens haben möchte, fängt quasi am Anfang des Absatzes an - das Prinzip ist gleich. Nur die Zeilenzahlen sind anders.
Wenn wir das ganze jetzt testen, sehen wir das bei Eingabe oder Editieren eines Content-Beitrags xt:Commerce jetzt 2 zusätzliche Felder anzeigt. Mann kan auch speichern und nichts geht verloren. Super. Jetzt fehlt nur noch die Ausgabe.
Die Ausgabe der Meta-Daten für Content in xt:Commerce
Soweit haben wir ja jetzt schon alles überstanden. Jetzt geht es an die Ausgabe von dem Ganzen. Dazu benötigen wir die Datei "metatags.php" aus dem Ordner "includes/modules/".
Auf den ersten Blick sieht diese Datei arg verschachtelt aus - ist sie auch. Ich gehe in einem seperaten Posting mal nur auf diese eine Datei ein. Jetzt wollen wir erst einmal gezielt die ausgabe des Contents aufbohren. Ich möchte Euch auch den Gedankengang zeigen, wie Ihr dorthin kommt. Fragen wir uns einmal was wir wissen. Wie sieht ein Link zum Content aus? Wir wissen hier, dass bei (jedenfalls abgeschalteten SEO URLS, mit SEO URLS ist die Information versteckt) eine Variable übergeben wird, die einen Paramter coID trägt. Dies ist eine Abkürzung für Content ID, also genau jene ID unter der unser Content der Datenbank abgespeichert wird. Wir wissen auch, dass wenn diese Informatonen in der URL stehen diese mittels GET übertragen wurden. Wenn wir also nach $_GET['coID'] suchen finden wir folgende Konstellation
if ($_GET['coID']) {
$contents_meta_query = xtDBquery("SELECT content_heading
FROM " . TABLE_CONTENT_MANAGER . "
WHERE content_group='" . $_GET['coID'] . "' and
languages_id='" . $_SESSION['languages_id'] . "'");
$contents_meta = xtc_db_fetch_array($contents_meta_query, true);
?>
<meta name="description" content="<?php echo META_DESCRIPTION; ?>" />
<meta name="keywords" content="<?php echo META_KEYWORDS; ?>" />
<title><?php echo TITLE.' - '.$contents_meta['content_heading']; ?></title>
<?php
}
xt:Commerce liest anhand der übergebenen coID alle notwendigen Daten aus der Datenbank aus. Jetzt gibt xt:Commerce allerdings nur die globalen Descriptions und Keywords aus, was für anständiges SEO natürlich völlig zu verachten ist. Wir ändern de Block also gemäß unseren Wünschen ab und wo wir schon dabei sind, optimieren wir auch gleich unseren Titel für Suchmaschinen. Wichtige Angaben sollten immer vorne Stehen. Suchmaschinenoptimierung geht wirkllich bis ins kleinste Detail. Also müssen wir bei unseren SEO-Strategien auch hierauf achten.
if ($_GET['coID']) {
$contents_meta_query = xtDBquery("SELECT content_heading, content_tags, content_desc
FROM " . TABLE_CONTENT_MANAGER . "
WHERE content_group='" . $_GET['coID'] . "' and
languages_id='" . $_SESSION['languages_id'] . "'");
$contents_meta = xtc_db_fetch_array($contents_meta_query, true);
?>
<meta name="description" content="<?php echo $contents_meta['content_desc']; ?>" />
<meta name="keywords" content="<?php echo $contents_meta['content_tags']; ?>" />
<title><?php echo $contents_meta['content_heading'].' - '.TITLE; ?></title>
<?php
}
Das waren schon unsere Änderungen in dieser Datei (für heute jedenfalls). Das Ergebnis kann man jetzt im Browser bewundern, wenn man sich den Quelltext der xt:Commerce-genertierten Seite anschaut.
Schlusswort
Zugegeben ist das nicht eine der leichtesten Modifikationen wenn man nur sehr wenig mit PHP macht. Allerdings hat es diese Modifikation in sich. Sie gibt damit dem Shopsystem xt:Commerce weit mehr SEO-technische Möglichkeiten als die Programmierer vorgesehen haben. Wer es sich zutraut, kann die anderen Meta-Titel noch so abändern, dass die wichtigen Punkte weiter vorne stehen, denn der Kunde bzw. Besucher weiß auf welcher seite er ist. Das muss man ihm nicht immer wieder zeigen. Die Suchmaschinen werden sich auch freuen, wenn sie nicht immer dasselbe lesen müssen. Es hat schon oft geholfen wenn man einfach den Titel ändert, wearum solltet Ihr das nicht auch zu Euren Gunsten nutzen? Ich freue mich über jeden Kommentar, egal ob Kritik oder Lob oder sogar eigene Erfahrung.
Alle Posts der Woche 27 / 2009 anschauen
Fandest Du den Beitrag interessant?
Fatal error: Call to undefined function the_flattr_permalink() in /var/www/html/web1028/html/seo-geek-de/wp-content/themes/seogeek/single.php on line 48





