contao / core

Contao 3 → see contao/contao for Contao 4
GNU Lesser General Public License v3.0
492 stars 213 forks source link

rel="canonical" #2474

Closed ghost closed 12 years ago

ghost commented 12 years ago

Please can we have a new field in site structure that gives the ability to add a rel="canonical" meta tag to the header?

More info on rel"canonical" here:

http://www.google.com/support/webmasters/bin/answer.py?hl=en&answer=139394

--- Originally created by Doublespark on August 26th, 2010, at 03:06pm (ID 2474)

leofeyer commented 12 years ago

You can add arbitrary tags to the page header in the page layout.

--- Originally created on August 26th, 2010, at 03:15pm

ghost commented 12 years ago

Hi Leo,

Bu that would mean having a unique page layout for each page that you need to implement rel="canonical" for.

It really needs to be a field in site structure where you can enter the relevant url. It could be a new page type?

Duplicate content is a real SEO "faux pas", Wordpress Joomla, Magento have all recently included this functionality.

Please can you reconsider?

--- Originally created by Doublespark on August 26th, 2010, at 03:25pm

ghost commented 12 years ago

you can write an extension that adds this field to the regular page and to the TL_HEAD section prior to output of the page.

The big problem is, how do you want to specify the canonical URL, next problem is, what if several other modules want to add a canonical page? Let's say you have several lister modules on the same page, each of those will want to specify the default sort order as canonical, this will result in "the last one winning" or even worse, multiple pages specified as canonical. Therefore a general solution is not possible (at least in my opinion) and it is therefore up to you to specify the canonical the way you need it. Either by adding it to the fe_page.tpl, adding it to the page layout or by writing a small extension that adds the field to the Page DCA and renders it accordingly.

--- Originally created by xtra on August 26th, 2010, at 03:38pm

leofeyer commented 12 years ago

First of all, you can use insert tags in the page layout to dynamically add the URL. Second of all, Contao already generates canonical URLs, therefore the feature is not required at all and will not be added to the core. You can add it as an extension though if you really think you need it.

--- Originally created on August 26th, 2010, at 03:54pm

leofeyer commented 12 years ago

--- Originally closed on August 26th, 2010, at 03:15pm

bekanntmacher commented 11 years ago

I have a totally different view. What about external pages? ;-(

bekanntmacher commented 11 years ago

...Contao already generates canonical URLs... I never saw that, can you give me an example?

leofeyer commented 11 years ago

Why do you think the URLs are not canonical?

bekanntmacher commented 11 years ago

Contao macht leider viele Inhalte unter zwei oder mehr URL's erreichbar (einfaches Bsp. die Home-Seite) wenn du das meinst.

Ich rede aber vom Canonical-Bereich im Head.

 <link rel="canonical" href="http://www.example.com/product.php?item=swedish-fish"/>

Wo es darum geht, zwei Seiten mit dem selben Inhalt als kanonisch zu markieren (SEO). Die Doublette kann auf einer externen oder internen Seite liegen. Wie soll ich jetzt eine externe oder interne Seite im Contao als kanonisch markieren?

rolandschuetz commented 10 years ago

Ich würde stark empfehlen das canonical-Tag im _fepage hinzuzufügen. Leo, du hast Recht, dass Contao saubere Urls erstellt. Contao stellt trotzdem unter vielen unterschiedlichen Urls den gleichen Inhalt zur Verfügung:

Google weiß somit nicht auf welche Seite er die Nutzer schicken soll und vergibt schlechtere Rankings.

Das Problem lässt sich in der Zwischenzeit ganz leicht lösen (Plugin, etc. sind alles nicht nötig): 1. Erstelle eine Datei _fe_pagecustom.html5 in deinem Template-Ordner mit folgendem Inhalt:

<!-- Template fe_page_custom.html5 -->
<?php $this->extend('fe_page'); ?>

<?php $this->block('meta'); ?>
    <?php $this->parent(); ?>
    <link rel="canonical" href="{{env::url}}/{{page::alias}}.html" />
<?php $this->endblock(); ?>

2. Unter Layout > Themes > Seitenlayout bearbeiten > Experten-Einstellungen > Seitentemplate _fe_pagecustom auswählen und speichern 3. Fertig, ab jetzt wird jetzt Seite von Google unter genau einem Namen indiziert.

leofeyer commented 10 years ago

Google weiß somit nicht auf welche Seite er die Nutzer schicken soll

Die Frage ist aber, wie Google von den "falschen" URLs überhaupt erfährt? Wenn ich z.B. Seitenaliase nicht explizit deaktiviere, generiert mir Contao niemals eine URL im Format <domain>/<id>.html. Wie sollte also Google an diese URL gelangen?

tristanlins commented 10 years ago

Beispiel 1: Die Startseite ist unter example.org und unter example.org/home-de.html verfügbar

Verwende für deine Startseite den Alias index, dann passiert das nicht ;-)

<link rel="canonical" href="{{env::url}}/{{page::alias}}.html" />

Das ist falsch! Damit killst du jede Reader Page, bei einer Reader Page wäre die kanonische URL nämlich: <link rel="canonical" href="{{env::url}}/{{page::alias}}/{{input::auto_item}}.html" />

@leofeyer können wir die ID URLs nicht kicken? Vielleicht über eine Checkbox analog zu Keine Seitenaliase verwenden dann halt Keine numerischen IDs in der URL verwenden?

aschempp commented 10 years ago

@leofeyer können wir die ID URLs nicht kicken? Vielleicht über eine Checkbox analog zu Keine Seitenaliase verwenden dann halt Keine numerischen IDs in der URL verwenden?

Nicht so einfach. Die nummerischen IDs werden benutzt falls das Feld "alias" leer ist. Was immer der Fall ist wenn du ne Seitenstruktur kopierst...

tristanlins commented 10 years ago

@aschempp ganz ehrlich, diese Seiten sind mir in dem Moment egal weil

  1. dupliziere ich eine Seitenstruktur in der Regel nur, wenn ich eine 2. Sprache anlegen will, d.h. ich muss ohnehin noch mal jede Seite ändern
  2. gibt es die Funktion Aliase generieren bei Mehrere bearbeiten.

Ich würde die Seite also einfach nicht verfügbar machen (mit einem Hinweis im Backend).

aschempp commented 10 years ago

Ich würde die Seite also einfach nicht verfügbar machen (mit einem Hinweis im Backend).

Das wäre aber ein Major BC-Break. Viel einfacher wäre es, die ID zu ignorieren falls ein Alias vorhanden ist.

tristanlins commented 10 years ago

@aschempp deshalb soll das ja als optionale Checkbox in die Systemeinstellungen, dann wäre es kein BC Break ;-) Aber die Idee, die ID zu ignorieren falls ein Alias vorhanden ist, wäre ebenso ein BC Break :-P

rolandschuetz commented 10 years ago

Das ist leider immer noch nur eine halbe Lösung, die Startseite wird dann von Google immer noch bei mehrsprachigen Seiten doppelt indiziert.

tristanlins commented 10 years ago

@rolandschuetz wieso das? Die lauten doch dann /de/ oder /en/ oder /fr/? Die werden doch dann nicht doppelt indiziert?

rolandschuetz commented 10 years ago

@tristanlins Wenn ich eine Startseite unter z.B. example.org habe, zweigt diese je nach Browser die Seite in z.B. DE or EN an. Zusätzlich gibt es dann noch example.org/home.html und example.org/startseite.html. Somit wird Englisch zweimal indiziert, einmal mit und einmal ohne Seiten-Pfad. (Die Option die Sprache zur Url hinzuzufügen ist ja optional.)

xchs commented 10 years ago

@rolandschuetz Wie schon weiter oben von @tristanlins erwähnt: Verwende für die Startseite den Seitenalias "index", damit Contao für diese Seite(n) keinen Alias in der URL generiert.

tristanlins commented 10 years ago

@rolandschuetz gerade zur Lösung dieses Problems ist die Option "Sprache zur URL hinzufügen" da. Deaktivierst du diese Funktion, kannst du meines Wissens (müsste ich aber testen) nur einer der beiden Seiten den Alias index setzen.

D.h. du hast example.com/ für Deutsch und example.com/home.html für Englisch (oder umgekehrt, je nach dem welche Seite den Alias index hat). Aktivierst du "Sprache zur URL hinzufügen", dann kannst du bei beiden den Alias index setzen und hast die bereits oben genannten Startpunkte example.com/de/ und example.com/en/. => Problem gelöst! :-)

rolandschuetz commented 10 years ago

Ich finde eben genau diese lange Diskussion zeigt, dass es hier viele Möglichkeiten gibt etwas falsch zu machen. Ich glaube Nicht-Entwickler oder Leute ohne SEO-Erfahrung wissen von alle dem nichts und die Chance hier etwas falsch zu machen ist sehr groß. Contao kann also (abgesehen von den ids) richtig konfiguriert werden, die Chance es falsch zu machen ist aber doch noch recht groß.

Zeromax commented 10 years ago

Bei SEO was falsch machen? :dancers:

SEO ist solange richtig bis was anderes definiert wurde... Lasst es draußen. Leute die SEO und Canonicals nicht kennen vermissen es nicht und brauchen es auch nicht.

Der Rest weiß was er tut und kann es selber einbinden oder auch nicht...

tristanlins commented 10 years ago

@rolandschuetz dafür gibt es Dokumentation - die mittlerweile sogar wieder richtig brauchbar ist - und uns, die Community ;-) Es gibt KEIN System bei dem du nicht etwas falsch machen kannst. Aber die Flexibilität ist notwendig, weil kein Projekt ist wie das andere.

BTW obwohl ich schon seit 2009 bei Contao bin, kenne ich den index Trick erst seit letztem Jahr :-D

rolandschuetz commented 10 years ago

Ich halte es für keine optimale Lösung, gerade dass du 4 Jahre Contao genutzt hattest und immer noch im Sinne von Google "Fehler" gemacht hattest zeigt meiner Meinung nach, dass hier Optimierungsbedarf besteht.

Ich scheine aber hier eine andere Meinung zu haben als die Mehrheit, es wird also so bleiben.

tristanlins commented 10 years ago

Viele Wege führen zum Ziel, ich habe mich letztlich niemals um dieses "Problem" gescherrt, weil es ohnehin keine Auswirkung auf das Ranking hat. Das "Duplicated Content" Phantom ist und bleibt ein Phantom. Ich konnte bisher niemals eine verbesserung / verschlechterung des Rankings dadurch feststellen.

rolandschuetz commented 9 years ago

@tristanlins Die offiziellen Aussagen von Google behaupten immer noch das Gegenteil. Google produziert eine Menge an Dokumentation zum Thema Duplicated Content und das GWO Team macht regelmässig Videos zum Thema, in dem sie sagen wie wichtig dies ist. Die Leute bei Google sind wirklich smart, ich glaube also dies ist ein wichtiges Thema.

Ich denke es gibt einfach zu viele Möglichkeiten wie man etwas unabsichtlich falsch machen kann. Ich denke, in den meisten Contao Installationen sind Seiten unter mehreren Urls verfügbar.

NinaG commented 9 years ago

Wie wäre es schlicht und einfach mit einem Freifeld in den Seiteneigenschaften, das genutzt werden kann um ergänzende, individuelle Angaben zum Header einzelner Seiten einzufügen? Diejenigen, die es nutzen wollen, können darin dann canonical-Angaben oder aber auch anderes Zeug wie z.B. META-property Angaben (Twitter, facebook, etc.) oder sonstige META-/LINK-/etc-Angaben einfügen.

Wenn es also für all diese Zwecke einfach eine optionale Textarea in den Seiteneigenschaften gäbe, wäre allen geholfen. Kein BC-Break, nichts aufgedrängtes für Leute die es nicht wollen, aber volle Flexibilität für diejenigen die es benötigen.

NinaG commented 9 years ago

Und ja, bitte in den Seiteneigenschaften, denn es geht explizit um Felder die individuell pro Seite sind (daher nicht im Seitenlayout einfügbar).

NinaG commented 9 years ago

Hier mal eine Auswahl beliebter Seiteneigenschaften für den Header, damit ihr versteht, weshalb ich ein Freifeld für sinnvoll halte. Natürlich heißt es nicht, dass man die alle einsetzt, nur als Beispiel was es u.a. so gibt:

<link rel="canonical" href="">

<meta name="robots" content="noodp">

<meta name="page-topic" content="">
<meta name="page-type" content="">
<meta name="geo.country" content="">
<meta name="geo.region" content="">
<meta name="geo.placename" content="">
<meta name="geo.position" content="">
<meta name="ICBM" content="">

<meta property="og:title" content="">
<meta property="og:type" content=""> 
<meta property="og:image" content="">
<meta property="og:url" content="">
<meta property="og:description" content=""> 

<meta property="twitter:title" content="">    
<meta property="twitter:card" content="">
<meta property="twitter:creator" content="">   
<meta property="twitter:image" content="">
<meta property="twitter:url" content="">
<meta property="twitter:description" content="">
Zeromax commented 9 years ago

Sagte ich lasst es draußen? https://github.com/contao/core/issues/2474#issuecomment-52542248

Macht es rein. SEO Experten rennen einem damit die Türen ein... @NinaG Ob ich an dieser stelle ein freies Textfeld machen würde: Jein, aber die Möglichkeit den canonical frei zu definieren finde ich eine gute Idee.

rolandschuetz commented 9 years ago

@Zeromax Nur weil Leute die canonials nicht kennen es nicht vermissen, heißt nicht dass sie es nicht brauchen. SEO ist leider immer noch ein Argument für Wordpress und gegen Contao. Wordpress macht hier automatisch alles richtig.

Zeromax commented 9 years ago

@rolandschuetz SEO oder hauptsächlich GEO letzten Endes gibt es immer ein anderes Steckpferd das gerade geritten wird. Zu Wordpress sag ich lieber mal nichts... Aber du hast schon recht man kann es auch für die einbinden welche es nicht kennen. was aber nach wie vor nicht davor schützt, dass es falsch angewendet wird.

wschwaiger commented 9 years ago

Könnte man nicht bereits ergänzende Meta-Informationen über das neue Template-System lösen? Und mittels HTML Inhaltselement Meta-Informationen verteilen? Also vllt so in diese Richtung

<?php $this->extend('fe_page') ?>

<?php $this->block('meta'); ?>
  <?php echo $this->html; ?>
<?php $this->endblock(); ?>
NinaG commented 9 years ago

Hierzu finde ich diese Übersicht ganz gut, was ein modernes CMS in Bezug auf SEO/Social/etc. leisten sollte (unter der Grafik gibt es die dazu gehörenden Beschreibungen + Links u.a. zu Google-Anleitungen: http://www.stateofdigital.com/cms-seo-requirements-checklist-2015-edition/

NinaG commented 9 years ago

Einige Punkte erfüllt Contao, bei anderen hinkt es hinterher. Aus meinem Agenturalltag kann ich bestätigen, dass moderne Kunden (also die mit etwas Ahnung) nach diesen Dingen fragen. Von den Dingen die Contao noch nicht (vollständig) im Core hat, fragen meine Kunden am meisten nach:

frontendschlampe commented 9 years ago
  • Social Tags (Open Graph, Twitter, etc.)

https://github.com/backbone87/contao-opengraph ;-)

NinaG commented 9 years ago

Core :)

frontendschlampe commented 9 years ago

Core :)

ja, ich weiß ;-)

Vielleicht will sie @leofeyer ja integrieren?! ;-)

In den nächsten Wochen werden wir unsere Erweiterung noch im die spezifischen Twitter und Google+ Tags ergänzen