Doppelten Kontent vermeiden durch Angabe einer kanonischen URL für Threadseiten, Forenübersichtsseiten, die Foren-Übersicht, Mitgliederlisten und Onlinelisten. Wenn also mehrere URLs zur gleichen oder selben Seite führen.

Beitrag 1762 von UFO-Peter » 12.12.2012, 23:29

Doppelten Kontent vermeiden durch Angabe einer kanonischen URL für Threadseiten, Forenübersichtsseiten, die Foren-Übersicht, Mitgliederlisten und Onlinelisten. Wenn also mehrere URLs zur gleichen oder selben Seite führen.

Beim phpBB3 sind oftmals derselben Seite verschiedene URLs zugeordnet, was Google zwar nicht als Täuschungsmanöver wertet. Aber besser ist es, wenigstens bei Threadseiten, Forumsübersichten und der Indexseite eine kanonische URL ausschließlich für den Bot anzuzeigen.

Festlegen der kanonischen (bevorzugten) URL-Version • Webmaster-Tools-Hilfe • http://www.google.com

Kanonische URLs funktionieren so, dass eine Webseite, die mehrere URLs hat, die zu dieser Seite führen; oben im Head-Bereich (nur) eine bevorzugte URL anzeigt; nämlich die kanonische URL, welche für Suchmaschinenbots bestimmt ist.

Bei nachfolgender Beschreibung habe ich mich an nachfolgendem Forumsthread von phpbb.de orientiert. Bei Threadseiten werden bei der Version von phpbb.de als kanonische Url immer die Url mit Thread-ID plus Nummer der Threadseite erzeugt.

Duplicate Content entfernen (PostID zu ThemenID) • phpBB.de

Anti-Double-Content – Kanonische URL-Umschreibung • phpBB.de

Einige der Beschreibungen beziehen sich ausschließlich auf Foren, wo kurze URLs nach dieser Anleitung installiert sind: (klick). Auch erschien es mir in diesem Fall auch besser, bei der Anzeige von Threadseiten als kanonische URL, die mit der Beitrags-ID zum letzten (unteren) Beitrag zu verwenden.

Damit die kanonische URL im Head-Bereich angezeigt wird, in der Template-Datei /styles/prosilver/template/overall_header.html unter dem Titel

Code: Alles auswählen
<title><!-- IF S_IN_MCP -->{L_MCP} &bull; <!-- ELSEIF S_IN_UCP -->{L_UCP} &bull; <!-- ENDIF -->{PAGE_TITLE}</title>

Folgendes einfügen, damit im Falle des Aufrufs einer kanonischen URL über eine andere Datei und nur für Suchmaschinenbots die kanonische URL angezeigt wird!

Code: Alles auswählen
<!-- IF U_CANONICAL and S_IS_BOT --><link rel="canonical" href="{U_CANONICAL}" />
<!-- ENDIF -->

Unter Umständen kann es besser sein, dass man in der Template-Datei overall_header.html die Anzeige der kanonischen URL bei allen Besuchern zulässt.

Code: Alles auswählen
<!-- IF U_CANONICAL --><link rel="canonical" href="{U_CANONICAL}" />
<!-- ENDIF -->


Damit die kanonische URL auch in der Druckansicht erscheint, füge man dies entsprechend auch in der Datei /styles/prosilver/template/viewtopic_print.html ein.


Aber nur vorige Änderung bewirkt nichts, weil der Platzhalter {U_CANONICAL}" noch in keiner php-Datei definiert ist. Damit dies für alle Seiten von Beitragsübersichten verwendet werden, also Thread-URLs, in der Datei viewtopic.php unter

Code: Alles auswählen
// Output the page

Folgende Zeile einfügen!

Code: Alles auswählen
$template->assign_var('U_CANONICAL', $phpbb_root_path . 'viewtopic.' . $phpEx . "?t=$topic_id" . (($start) ? "&amp;start=$start" : ''));

Oder, damit sich die kanonische URL auf die Beitrags-ID des jeweils letzten Beitrags von Threadseiten bezieht, nachfolgende Zeile einfügen anstatt der vorigen! Diese Variante ist besser als die vorige, wenn das Forum auf einen Beitrag je Threadseite eingestellt ist, weil die kanonische URL sich auf den Beitrag bezieht.

Aber bei der anderen Variante zuvor bezieht sie sich auf die Threadseite. Und Beiträge können durch Löschen von Beiträgen oder Änderung der Einstellung für die Anzahl der Beiträge je Threadseite auf eine andere Threadseite wechseln, sodass sich dadurch leider kanonische URLs für Beiträge ändern können.

Code: Alles auswählen
$template->assign_var('U_CANONICAL', $phpbb_root_path . 'viewtopic.' . $phpEx . '?p=' . $row['post_id']);

Oder stattdessen folgende Zeile, falls im Forum kurze URLs installiert sind, wo sich die kanonische URL auf den jeweils letzten Beitrag einer Threadseite bezieht.

Code: Alles auswählen
$template->assign_var('U_CANONICAL', $phpbb_root_path . 'b' . $row['post_id']);



Für Forenübersichten in der Datei viewforum.php unter

Code: Alles auswählen
$template->assign_vars(array(
   'MODERATORS'   => (!empty($moderators[$forum_id])) ? implode(', ', $moderators[$forum_id]) : '',

Folgende Zeile einfügen!

Code: Alles auswählen
'U_CANONICAL' => $phpbb_root_path . 'viewforum.' . $phpEx . "?f=$forum_id&start=$start",

Oder wenn die Seitenzahl am Ende der URL bei der ersten Seite nicht erscheinen soll, stattdessen nachfolgende Zeile einfügen!
Code: Alles auswählen
'U_CANONICAL' => $phpbb_root_path . 'viewforum.' . $phpEx . "?f=$forum_id" . (($start) ? "&start=$start" : ''),

Oder falls kurze URLs installiert sind (weil inzwischen auch alle Seiten von Forumübersichtsseiten als kurze URLs möglich sind), stattdessen nachfolgende Zeile einfügen!

Code: Alles auswählen
'U_CANONICAL' => $phpbb_root_path . "f$forum_ids$start",

Oder damit die Seitenzahl unnötiger Weise nicht bei der ersten Seite angezeigt wird:

Code: Alles auswählen
'U_CANONICAL'   => $phpbb_root_path . "f$forum_id" . (($start) ? "s$start" : ''),



Für die Forum-Übersicht (Indexseite des Boards) in der Datei index.php unter

Code: Alles auswählen
// Assign index specific vars
$template->assign_vars(array(
   'TOTAL_POSTS'   => sprintf($user->lang[$l_total_post_s], $total_posts),
   'TOTAL_TOPICS'   => sprintf($user->lang[$l_total_topic_s], $total_topics),
   'TOTAL_USERS'   => sprintf($user->lang[$l_total_user_s], $total_users),
   'NEWEST_USER'   => sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])),

folgende Zeile einfügen!

Code: Alles auswählen
'U_CANONICAL'   => $phpbb_root_path . 'i',

Dies ungetestet, weil ich das bei diesem Forum nicht so machte. Bei meinem Forum (klick) habe ich eine (weitere) Datei overall_header2.html; die dafür sorgt, dass oben der Header nur auf der Indexseite angezeigt wird; sodass ich nur bei dieser Template-Datei wie bei der ersten Einfügung unter

Code: Alles auswählen
<!-- IF S_CONTENT_DIRECTION eq 'rtl' --><link href="{T_THEME_PATH}/bidi.css" rel="stylesheet" type="text/css" media="screen, projection" />
<!-- ENDIF -->

Folgendes einfügte, sodass ich (auch) die Datei index.php nicht änderte.

Code: Alles auswählen
<!-- IF S_IS_BOT --><link rel="canonical" href="./i" />
<!-- ENDIF -->

Falls die kanonische URL für alle erscheinen soll; also nicht nur für Suchmaschinenbots, stattdessen folgende Zeile einfügen!

Code: Alles auswählen
<link rel="canonical" href="./i" />


Man sollte bei den Webmaster-Tools von Google (klick) seine Seite hinzufügen; dann auf den Link dieser Seite klicken, um insbesondere bei den Crawling-Fehlern und den Html-Vorschlägen zu schauen, was man alles verbessern kann.

So hatte ich bei den Crawling-Fehlern eine Liste von nicht gefundenen Seiten meines Forums. Ein Teil von diesen waren in meinem Forum fehlerhaft verlinkt: Klick! Und andere waren auf externen Seiten falsch verlinkt. Letztere URLs schloss ich dann aus durch entsprechende Einträge in der Datei robots.txt: Klick!

Bei den Html-Vorschlägen wurden mir viele URLs mit doppelten Titel-Tags angezeigt. Die meisten von diesen beseitigte ich durch mehr Angaben im Titel: Klick! Auch bei der "Wer ist online?" – und der Mitgliederliste gibt es mehrfache Titel-Tags je Seite.

Weil aber die aufgerufenen Seiten jeweils identisch oder ähnlich sind, lohnt es sich meines Erachtens nicht, die Titel entsprechend zu erweitern, um doppelte zu vermeiden. Stattdessen reicht es aber meines Erachtens, wenn man für diese Seiten kanonische URLs einfügt.

Wenn nämlich durch jeweils verschiedene URLs aufgerufene Mitgliederlisten alle dieselbe kanonische URL haben, kann Google diese als dieselbe Seite betrachten; wodurch es dann kein Problem mehr ist, wenn alle diese Seiten denselben Titel haben. Füge in der Datei memberlist.php unter

Code: Alles auswählen
// Generate page
$template->assign_vars(array(

folgende Zeile ein, um in allen Mitgliederlisten eine kanonische URL einzufügen!

Code: Alles auswählen
'U_CANONICAL' => $phpbb_root_path . 'memberlist.' . $phpEx,

Füge in der Datei viewonline.php unter

Code: Alles auswählen
// Send data to template
$template->assign_vars(array(

folgende Zeile ein, um in allen "Wer ist online?" – Seiten eine kanonische URL einzufügen!

Code: Alles auswählen
'U_CANONICAL' => $phpbb_root_path . 'viewonline.' . $phpEx,

Liebe Leser! Wenn Sie die Schildbürgerstreiche der Politik(er) schon lange satt haben, unter­stützen Sie bitte dieses Forum, indem Sie es auf anderen Seiten verlinken, oder nur aufs 'Welt­rettungs­forum' aufmerk­sam machen!
 
Falls Sie aber meinen, dass ein Staat gemäß Grund­gesetz schon dann demo­kratisch ist, wenn das Wahlvolk alle vier Jahre wählen gehen darf, wer die Dikta­toren sein sollen. Lügenpresse? Lügen­medien? Fall­bei­spiele!
 
Oder es in Ordnung wäre, dass im Gegensatz zur ehe­ma­ligen DDR, Menschen so wenig ver­dienen, dass es nicht zum Leben reicht und vieler­orts unver­schuld­ete Ob­dach­losig­keit herrscht; während dem­gegen­über einige wenige Multi­million­äre in uner­mess­lichem Reich­tum schwelgen.
 
Oder, wenn Sie meinen, dass AfD und PEGIDA rechts­radikal wären, weil beide gegen das Gut­menschen­tum sind, das alle Flücht­linge inte­grieren will ein­schließ­lich Deutsch­lern­pflicht; obwohl sie doch in einem Lager mit Wohn­con­tainern viel besser auf­ge­hoben wären.
 
Oder, wenn Sie abstreiten, dass auch Deutschland den Flüchtlingsstrom mit verursachte, indem die deutsche Regierung verantwortlich dafür war, dass Deutschland 2014 nur noch die Hälfte an den UNHCR zahlte, wodurch eine Hungersnot in den Flüchtlingslagern ausgelöst wurde.
 
Oder, wenn Sie die BRD für einen Rechts­staat halten, obwohl Richter und An­wälte durch per­ma­nente Rechts­beugung vor­ein­ge­nom­men um den Er­halt ihrer Arbeits­plätze be­müht sind; und mich deswegen Richter Rüdiger Richel rechtskräftig dazu verurteilte, Kinder zu ermorden. Wir brauchen eine un­vor­ein­ge­nom­me­ne Justiz anstatt eine unab­hängige Justiz. Genauso brauchen wir un­ab­häng­ige Lehrer anstatt ein (staat­lich ge­steu­er­tes) Bildungs­system.
 
Oder, wenn Sie glauben, dass die Kirche mit ihrer geistes­kranken Wahn­vor­stellung recht hat; dass einst Gott seinen (angeb­lich) einzigen Sohn sandte, damit dieser als Opfer­lamm brutal er­mordet wird zwecks Sünden­ver­gebung. Juden unschuldig an der Kreuzigung Jesu.
 
Oder, wenn Sie allen Ernstes meinen, dass soge­nannte "Lesben" und "Schwule" sexuell so orien­tiert sind, dass unbe­dingt die Ge­nital­ien nicht zu­ein­an­der passen dürfen; oder, dass der Terror­an­schlag in Paris nichts mit dem Islam zu tun hat.
 
Oder die sexuelle Neigung zu 'vor­puber­tärem' Kind ab­artig sei, obwohl manche Mädchen fast schon im Klein­kind­alter ge­schlechts­reif sind und trotzdem zur Prüderie gezwungen werden; Sie aber demgegenüber Zwangs­be­berg­steigung, Zwangs­artistik und Zwangs­leistungs­be­sportung von Kindern OK finden; brauchen Sie dieses Forum natürlich nicht unter­stützen.