Double Content verhindern – xt:Commerce + Canonical URLs


Problem:

Immer wieder gibt es gerade bei Online-Shops das Problem das Suchmaschinen im Speziellen Google Produktseiten die über verschiedene Urls aufrufbar sind, abwerten oder gar aus dem Index werfen.

Double Content entsteht bspw. durch Links auf die druckbare Version einer Seite oder einer URL mit Ausgabe der Sprache oder ohne usw.

Der Grund für die Abstrafung ist eindeutig, die Suchmaschinen wissen nicht welche URL nun die „Haupt-URL“ für diese Seite ist und verwirft URLs nach eigenem Ermessen.

Lösung:

Eine Lösung die sich die Grossen 3: Google, Yahoo und Microsoft ausgedacht haben heisst „Canonical Tag„. Ein HTML-Tag das die Haupt-URL für das Dokument ausgibt egal unter welcher URL diese Seite vom Besucher erreicht wurde:
[sourcecode language=“html“][/sourcecode]
Dieser wird einfach in den Head-Bereich der HTML-Seite eingebaut und eben mit der URL, die sich für diese Seite nicht ändern sollte.

Umsetzung in einem xt:Commerce Shop:

Um es kurz zu machen, ledglich diese Datei muss ersetzt werden:  

/includes/modules/metatags.php

Viele wird dies nicht wundern 😉 Die Original metatags.php ist von der Struktur her sowieso nicht gerade optimal um Anpassungen vorzunehmen also habe ich sie kurzerhand neu geschrieben was dann so aussieht:

[sourcecode language=“php“]isProduct())
{
if(!empty($product->data[‚products_meta_keywords‘]))
{
$meta_keyw=$product->data[‚products_meta_keywords‘];
}
else{
//– Wenigstens die Bezeichnung anhängen
$meta_keyw = $product->data[‚products_name‘].‘, ‚.$product->data[‚products_model‘].‘, ‚.$meta_keyw;
}
if(!empty($product->data[‚products_meta_description‘]))
{
$meta_descr = $product->data[‚products_meta_description‘];
}
else{
$meta_descr = $product->data[‚products_name‘].‘ ‚.$product->data[‚products_model‘].‘: ‚.
$product->data[‚products_description‘].‘, ‚.
$meta_descr;
}
$meta_title = $product->data[‚products_name‘].‘ ‚.$product->data[‚products_model‘].‘ | ‚.TITLE;

//– Canonical-URL
//– http://www.linkvendor.com/blog/der-canonical-tag-%E2%80%93-was-kann-man-damit-machen.html
$canonical_url = xtc_href_link(FILENAME_PRODUCT_INFO, ‚products_id=‘.$product->data[‚products_id‘].’&language=‘.$_SESSION[‚language_code‘]);
}
}
elseif(!empty($_REQUEST[‚cPath‘]))
{
if (strpos($_REQUEST[‚cPath‘],’_‘) > 0)
{
$arr    = explode(‚_‘,xtc_input_validation($_REQUEST[‚cPath‘],’cPath‘,“));
$_cPath = array_pop($arr);
}
else{
$_cPath=(int)$_REQUEST[‚cPath‘];
}

$categories_meta_query=xtDBquery(„SELECT categories_meta_keywords,
categories_meta_description,
categories_meta_title,
categories_name,
categories_description
FROM „.TABLE_CATEGORIES_DESCRIPTION.“
WHERE categories_id='“.$_cPath.“‚ and
language_id='“.$_SESSION[‚languages_id‘].“‚“);
$categories_meta = xtc_db_fetch_array($categories_meta_query,true);

if(!empty($categories_meta[‚categories_meta_keywords‘]))
{
$meta_keyw = $categories_meta[‚categories_meta_keywords‘];
}
else{
$meta_keyw = $categories_meta[‚categories_name‘].‘, ‚.$meta_keyw;
}

if(!empty($categories_meta[‚categories_meta_description‘]))
{
$meta_descr = $categories_meta[‚categories_meta_description‘];
}
else{
$meta_descr = $categories_meta[‚categories_name‘].‘: ‚.
$categories_meta[‚categories_description‘].‘, ‚.
$meta_descr;
}

if(!empty($categories_meta[‚categories_meta_title‘]))
{
$meta_title = $categories_meta[‚categories_meta_title‘].‘ | ‚.TITLE;
}
else{
$meta_title = $categories_meta[‚categories_name‘].‘ | ‚.TITLE;
}
//– Canonical-URL
//– http://www.linkvendor.com/blog/der-canonical-tag-%E2%80%93-was-kann-man-damit-machen.html
$canonical_url = xtc_href_link(FILENAME_DEFAULT, ‚cPath=‘.$_REQUEST[‚cPath‘].’&language=‘.$_SESSION[‚language_code‘]);
}
elseif($_REQUEST[‚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);

if(!empty($contents_meta[‚content_heading‘]))
{
$meta_title = $contents_meta[‚content_heading‘].‘ | ‚.TITLE;
$meta_descr = $contents_meta[‚content_heading‘].‘ | ‚.TITLE;
}
//– Canonical-URL
//– http://www.linkvendor.com/blog/der-canonical-tag-%E2%80%93-was-kann-man-damit-machen.html
$canonical_url = xtc_href_link(FILENAME_CONTENT, ‚coID=‘.$_GET[‚coID‘].’&language=‘.$_SESSION[‚language_code‘]);
}
elseif($_REQUEST[‚manufacturers_id‘])
{
$contents_meta_query=xtDBquery(„SELECT * „.
„FROM “ . TABLE_MANUFACTURERS.“ „.
„WHERE manufacturers_id = „.xtc_db_prepare_input($_REQUEST[‚manufacturers_id‘]));
$contents_meta = xtc_db_fetch_array($contents_meta_query,true);

if(!empty($contents_meta[‚manu_meta_title‘]))
{
$meta_title = $contents_meta[‚manu_meta_title‘].‘ | ‚.TITLE;
$meta_descr = $contents_meta[‚manu_meta_title‘].‘ | ‚.TITLE;
}
}
?>

 

 


[/sourcecode]

Bitte erst am Testshop ausprobieren, bevor dieser Code in den Live-Shop übernommen wird!

Links:

Problem:

Immer wieder gibt es gerade bei Online-Shops das Problem das Suchmaschinen im Speziellen Google Produktseiten die über verschiedene Urls aufrufbar sind, abwerten oder gar aus dem Index werfen.

Double Content entsteht bspw. durch Links auf die druckbare Version einer Seite oder einer URL mit Ausgabe der Sprache oder ohne usw.

Der Grund für die Abstrafung ist eindeutig, die Suchmaschinen wissen nicht welche URL nun die „Haupt-URL“ für diese Seite ist und verwirft URLs nach eigenem Ermessen.

Lösung:

Eine Lösung die sich die Grossen 3: Google, Yahoo und Microsoft ausgedacht haben heisst „Canonical Tag„. Ein HTML-Tag das die Haupt-URL für das Dokument ausgibt egal unter welcher URL diese Seite vom Besucher erreicht wurde:
[sourcecode language=“html“][/sourcecode]
Dieser wird einfach in den Head-Bereich der HTML-Seite eingebaut und eben mit der URL, die sich für diese Seite nicht ändern sollte.

Umsetzung in einem xt:Commerce Shop:

Um es kurz zu machen, ledglich diese Datei muss ersetzt werden:  

/includes/modules/metatags.php

Viele wird dies nicht wundern 😉 Die Original metatags.php ist von der Struktur her sowieso nicht gerade optimal um Anpassungen vorzunehmen also habe ich sie kurzerhand neu geschrieben was dann so aussieht:

[sourcecode language=“php“]isProduct())
{
if(!empty($product->data[‚products_meta_keywords‘]))
{
$meta_keyw=$product->data[‚products_meta_keywords‘];
}
else{
//– Wenigstens die Bezeichnung anhängen
$meta_keyw = $product->data[‚products_name‘].‘, ‚.$product->data[‚products_model‘].‘, ‚.$meta_keyw;
}
if(!empty($product->data[‚products_meta_description‘]))
{
$meta_descr = $product->data[‚products_meta_description‘];
}
else{
$meta_descr = $product->data[‚products_name‘].‘ ‚.$product->data[‚products_model‘].‘: ‚.
$product->data[‚products_description‘].‘, ‚.
$meta_descr;
}
$meta_title = $product->data[‚products_name‘].‘ ‚.$product->data[‚products_model‘].‘ | ‚.TITLE;

//– Canonical-URL
//– http://www.linkvendor.com/blog/der-canonical-tag-%E2%80%93-was-kann-man-damit-machen.html
$canonical_url = xtc_href_link(FILENAME_PRODUCT_INFO, ‚products_id=‘.$product->data[‚products_id‘].’&language=‘.$_SESSION[‚language_code‘]);
}
}
elseif(!empty($_REQUEST[‚cPath‘]))
{
if (strpos($_REQUEST[‚cPath‘],’_‘) > 0)
{
$arr    = explode(‚_‘,xtc_input_validation($_REQUEST[‚cPath‘],’cPath‘,“));
$_cPath = array_pop($arr);
}
else{
$_cPath=(int)$_REQUEST[‚cPath‘];
}

$categories_meta_query=xtDBquery(„SELECT categories_meta_keywords,
categories_meta_description,
categories_meta_title,
categories_name,
categories_description
FROM „.TABLE_CATEGORIES_DESCRIPTION.“
WHERE categories_id='“.$_cPath.“‚ and
language_id='“.$_SESSION[‚languages_id‘].“‚“);
$categories_meta = xtc_db_fetch_array($categories_meta_query,true);

if(!empty($categories_meta[‚categories_meta_keywords‘]))
{
$meta_keyw = $categories_meta[‚categories_meta_keywords‘];
}
else{
$meta_keyw = $categories_meta[‚categories_name‘].‘, ‚.$meta_keyw;
}

if(!empty($categories_meta[‚categories_meta_description‘]))
{
$meta_descr = $categories_meta[‚categories_meta_description‘];
}
else{
$meta_descr = $categories_meta[‚categories_name‘].‘: ‚.
$categories_meta[‚categories_description‘].‘, ‚.
$meta_descr;
}

if(!empty($categories_meta[‚categories_meta_title‘]))
{
$meta_title = $categories_meta[‚categories_meta_title‘].‘ | ‚.TITLE;
}
else{
$meta_title = $categories_meta[‚categories_name‘].‘ | ‚.TITLE;
}
//– Canonical-URL
//– http://www.linkvendor.com/blog/der-canonical-tag-%E2%80%93-was-kann-man-damit-machen.html
$canonical_url = xtc_href_link(FILENAME_DEFAULT, ‚cPath=‘.$_REQUEST[‚cPath‘].’&language=‘.$_SESSION[‚language_code‘]);
}
elseif($_REQUEST[‚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);

if(!empty($contents_meta[‚content_heading‘]))
{
$meta_title = $contents_meta[‚content_heading‘].‘ | ‚.TITLE;
$meta_descr = $contents_meta[‚content_heading‘].‘ | ‚.TITLE;
}
//– Canonical-URL
//– http://www.linkvendor.com/blog/der-canonical-tag-%E2%80%93-was-kann-man-damit-machen.html
$canonical_url = xtc_href_link(FILENAME_CONTENT, ‚coID=‘.$_GET[‚coID‘].’&language=‘.$_SESSION[‚language_code‘]);
}
elseif($_REQUEST[‚manufacturers_id‘])
{
$contents_meta_query=xtDBquery(„SELECT * „.
„FROM “ . TABLE_MANUFACTURERS.“ „.
„WHERE manufacturers_id = „.xtc_db_prepare_input($_REQUEST[‚manufacturers_id‘]));
$contents_meta = xtc_db_fetch_array($contents_meta_query,true);

if(!empty($contents_meta[‚manu_meta_title‘]))
{
$meta_title = $contents_meta[‚manu_meta_title‘].‘ | ‚.TITLE;
$meta_descr = $contents_meta[‚manu_meta_title‘].‘ | ‚.TITLE;
}
}
?>

 

 


[/sourcecode]

Bitte erst am Testshop ausprobieren, bevor dieser Code in den Live-Shop übernommen wird!

Links:

9 Kommentare bei „Double Content verhindern – xt:Commerce + Canonical URLs

  1. Klasse Vorschlag und Tipp von Herrn König.

    Beim ersten Teil, dem Link zum cannonical tag habe ich nicht ganz verstanden, was als Haupt – URL bezeichnet wird.
    In welche xtc – Datei wird der link normalerweise eingefügt
    (index.html ist es wohl nicht?)?

    Danke für Erläuterung.

    altaperla

  2. Als „Hauptlink“ wird die reguläre URL dieser speziellen Seite in Ihrem Shop bezeichnet. Sie müssen also z.bsp. festlegen, dass die Startseite Ihres Shops folgende URL haben soll: „http://www.meinshop.de/index.php“ und dieses so im Canonical Tag hinterlegen.
    Damit wissen die Suchmaschinen, dass die Startseite zwar auch unter: „http://www.meinshop.de/“ oder „http://www.meinshop.de/index.php?referer=taubenschlag“ etc. aufgerufen werden kann, indiziert wird sie aber nur mit der im Canonical Tag hinterlegten URL.

    Falls noch Fragen sind bitte hier stellen…

  3. Danke für den Vorschlag, aber bei mir passiert nichts nach der Änderung der /includes/modules/metatags.php

    Wo muss ich den bei xt: die:

    noch mit einbinden, bzw. definieren?
    Wenn ich es richtig verstanden habe, dann wird durch die Einbindung der neuen metatags.php dies automatisch für alle generiert, oder?

    Danke,

    Tom

  4. Hallo Tom,
    schau mal in der /includes/header.php nachschauen wie die header.php eingebunden ist. Normalerweise über einen „include(DIR_WS_MODULES.FILENAME_METATAGS);“, bitte mal die Zeile nachschauen.

  5. Wie bekomme ich das noch unter?:

    <meta name="description" content="“ />
    <meta name="keywords" content="“ />
    <meta name="page-topic" content="“ />

    <?
    }
    // Ende seo-geek.de Modifikation

  6. Hallo,
    leider fehlt von Deinem Code der Hauptteil, aber so wie ich das sehe möchtest Du lediglich die Herstellerabfrage mitreinmachen – aber wozu? Wenn Du Dir den obigen Code anschaust siehst Du, dass diese schon eingebaut ist.

  7. Hallo!

    Ich habe neulich die „Shopstat SEO-URLs“ eingebaut und die o. g. metatags.php eingesetzt.

    Ich würde gern noch mal die Frage von „altaperla“ aufgreifen.

    Wie die „Haupt-URL“ des Shops aussehen soll, weiß ich. Mir ist nur noch nicht klar, welche Datei ich nun im Shop editieren muss, um -wie unter dem ersten Teil Deines Beitrags beschrieben- den
    <link rel=”canonical” href=”http://www.beispiel.de/”
    für die Startseite zu setzen, ohne mit den anderen in Konflikt zu geraten.

  8. Hallo Udo,

    die einzige Datei die Du ersetzen musst ist die metatags.php.
    Du solltest also schon cannonical-Urls auf der Seite in den metatags sehen…

    Vielleicht hatte ich die Frage falsch verstanden?!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *