terminal42 / contao-changelanguage

ChangeLanguage is an extension for the Contao CMS which allows visitors to switch between different languages of your website.
43 stars 36 forks source link

hreflang-Tag x-default optional setzen #144

Closed stefan-at-work closed 3 years ago

stefan-at-work commented 6 years ago

Momentan gibt es keine Möglichkeit die Fallbacksprache oder eine andere Sprache für Google als x-default zu definieren. Dies hat zur Folge, das Google in den Suchergebnissen der nicht per hreflang definierten Sprachen die URLs aller definierten Sprachen nach eigenem Gusto indiziert und in den Suchergebnissen anzeigt.

Beispiel Seitenaufbau: en / de / pl (Fallback en) hrfelang:

Sucht nun ein Kunde aus z.B. Dänemark über Google bekommt er wie oben bereits erwähnt unterschiedliche Ergebnisse aller Sprachen angezeigt.

Um Suchanfragen aus nicht definierten Sprachen oder Regionen ebenfalls bedienen zu können, bietet sich hreflang=“x-default“ an. Dieser Wert kommt dann zum Einsatz, wenn beispielsweise Sprachen bei Google an Standorten eingegeben werden, die durch die bisher verwendeten hreflang-Tags nicht spezifiziert werden.

Es würde also Sinn machen, bei den Spracheinstellungen optional festzulegen, ob diese Sprache als x-default definiert werden soll.

aschempp commented 6 years ago

Nach meinem Wissen sollte es nicht vorkommen dass eine Sprache keinen hreflang hat, denn jede Seitenstruktur hat eine Sprache in Contao.

Deine Verwendung von x-default ist allerdings falsch. x-default soll für eine Seite stehen die keine Sprache hat, beispielsweise die initiale Sprachauswahl (welche es bei Contao eigentlich nicht gibt), Beispiel https://www.emmentaler.ch

stevemc04 commented 5 years ago

Hi @aschempp , ich würde mich hier gerne @stefan-at-work anschliessen wollen. Er erläutert m.E. exakt wofür wir (SEO) den x-default benötigen. Dein exemplarisches Beispiel ist ebenfalls passend. Schlussendlich ist der kleinste Nenner bei der einfachen Logik, dass Google nicht wissen kann, welche Sprache als Suchergebnis im SERP angezeigt werden soll wenn diese eben nicht definiert ist. Habe ich meine Sprache in Deutsch und Englisch dann ist unklar, welche Sprache dann z.B. für einen suchenden Franzosen ausgespielt wird. Und hier bräuchten wir eigentlich dringend einen einfachen weg, die Sprache für den x-default zu definieren, so dass ich bestimmen kann, dass in dem Fall der Franzose das englische Snippet erhält. Unabhängig davon, dass Franzosen kein englisch sprechen, war also nicht das beste Beispiel :-) Ich wäre um die x-default Funktion sehr verlegen und dankbar wenn Du das mit einfließen lassen könntest.

Noch ergänzend sei gesagt, dass ein x-default keine Pflicht ist bzgl. SEO aber wenn mann gezielte Sprachen im SERP ausliefern will und dort kein Zufallssituation haben will, ist es erforderlich. Bei mir persönlich ist es ein Standard.

aschempp commented 5 years ago

Wenn ich das richtig verstehe, dann müsste ein x-default Link immer jeweils für die Fallback-Sprache gemacht werden?

x-default is a reserved hreflang value that can be used to specify a default version for a document. The x-default URL is not targeted at a specific region and/or language and is supposed to be shown to unspecified users. Google suggests to define an x-default version in each URL set, which will be shown to users from unspecified regions or languages in search results.[1][2] The URL that is defined as the x-default for a certain document, can also be specified for a certain language or language and region at the same time. https://en.wikipedia.org/wiki/Hreflang#X-Default

fritzmg commented 5 years ago

I think so too.

In theory you should also be able to define an optional, custom x-default page or URL for each page. Let's say you have a website that is in German, French & Italian. The default might be German for example - but you have a few pages that are also provided in English. You might want to set the x-default for those URLs to the English pages instead of the German ones.

stevemc04 commented 5 years ago

Erst mal vielen Dank für das Feedback bzw. die Reaktion :-) Also es muss nicht zwingend die Fallback Sprache sein, welche ich im Contao festlege. @fritzmg beschreibt das schon recht gut auch wenn es ein spezieller Fall ist. Ich kann eine Seite in Deutsch/Englisch haben und Deutsch als Fallback aber als x-default möchte ich englisch damit jede Sprache die nicht definiert ist mit Englisch bedient wird also bzw. der User, welcher in einer anderen Sprache als DE/EN sucht. Somit wäre hier die Fallback Sprache nicht gleich dem X-Default und @fritzmg berschreibt nochmal einen besonderen Fall, wo nicht die komplette Sprache als X-default gilt sondern pro Seite explizit zugewiesen. Ich wäre glücklich wenn ich z.B. im Strukturbaum oder wo auch immer bei der Sprache einen Haken setzen kann, dass die als X-default gilt. Bei dem Beispiel von @fritzmg müsste es diese Option quasi für jede einzelne Seite geben.

fritzmg commented 5 years ago

Naja die Default Sprache hast du ja ohnehin schon definiert. Oder willst du die "Contao interne Default Sprache" separat von der "x-default" Sprache setzen können?

stefan-at-work commented 5 years ago

@fritzmg Im Quelltext wird momentan, die für Google relevante x-default gar nicht ausgegeben. Lediglich die rel-alternativ wird von Changelanguage gesetzt.

fritzmg commented 5 years ago

Ja schon klar - aber das war ja nicht die Frage. @stevemc04 möchte die x-default language nochmals separat setzen, obwohl Contao ja schon eine Einstellung für die Fallback Sprache hat. In den meisten Fällen sollte wohl die x-default Sprache auch die Fallback Sprache sein. Daher meine Frage ob man das wirklich separat setzen können muss, oder ob changelanguage einfach die Fallback Sprache als x-default nimmt.

(Unabhängig davon ob man nun x-default pro Page setzen kann oder nicht.)

stefan-at-work commented 5 years ago

Ja, wir haben z.B. einen Kunden mit de / en / pl. Im polnischen Sprachzweig gibt es z.B. separate Seiten, wo es kein Pendant in de oder en gibt. Auf diesen Seiten wäre das Setzen eines x-default für pl hinsichtlich SEO sinnvoll.

fritzmg commented 5 years ago

Aber in diesem Fall brauchst du ja auch kein x-default.

stefan-at-work commented 5 years ago

Stimmt auch wieder. Zu kompliziert gedacht.

stevemc04 commented 5 years ago

@fritzmg ne ist nicht immer identisch mit der Fallbacksprache. Hatte ich ja in meinem Post erläutert. Es gibt z.B. Ein Projekt in DE und EN wo DE die Fallbacksprache ist und das liegt nämlich u.a. daran (@stefan-at-work ), dass das Projekt mehr Seiten in DE hat als in EN also Seiten, die es in EN einfach nicht gibt. Ich möchte aber jemanden, der z.B. auf Französisch sucht, die Englische Sprache ausliefern (die, die es halt gibt) obwohl DE die Fallbacksprache ist. Das hat zudem damit zu tun, weil es eben ein Deutsches Unternehmen ist und Deutsch eben auch die Unternehmenssprache. Ich wäre halt damit unabhängig wenn ich frei wählen kann, welche Sprache der verwendeten den x-default stellt.

fritzmg commented 5 years ago

@fritzmg ne ist nicht immer identisch mit der Fallbacksprache. Hatte ich ja in meinem Post erläutert. Es gibt z.B. Ein Projekt in DE und EN wo DE die Fallbacksprache ist und das liegt nämlich u.a. daran (@stefan-at-work ), dass das Projekt mehr Seiten in DE hat als in EN also Seiten, die es in EN einfach nicht gibt.

Wenn nun jemand aus Spanien auf eure Seite zugreift, dann möchtet ihr, dass der Benutzer zuerst die Deutsche Seite sieht und nicht die Englische Seite? Wenn die Seite auch nur zu 10% übersetzt ist, der Benutzer aber zu 0% Deutsch lesen kann, aber zu 100% Englisch, dann wäre Englisch als Fallback Sprache ja immer noch die bessere Wahl.

stevemc04 commented 5 years ago

@fritzmg ne ist nicht immer identisch mit der Fallbacksprache. Hatte ich ja in meinem Post erläutert. Es gibt z.B. Ein Projekt in DE und EN wo DE die Fallbacksprache ist und das liegt nämlich u.a. daran (@stefan-at-work ), dass das Projekt mehr Seiten in DE hat als in EN also Seiten, die es in EN einfach nicht gibt.

Wenn nun jemand aus Spanien auf eure Seite zugreift, dann möchtet ihr, dass der Benutzer zuerst die Deutsche Seite sieht und nicht die Englische Seite? Wenn die Seite auch nur zu 10% übersetzt ist, der Benutzer aber zu 0% Deutsch lesen kann, aber zu 100% Englisch, dann wäre Englisch als Fallback Sprache ja immer noch die bessere Wahl.

Ich glaube wir meinen zwei unterschiedliche Dinge. Die Fallback Sprache ist für mich die Seite mit der "Muttersprache" und der breitesten Struktur. In dem Fall DE. Dann legen ich z.B. EN als zweite Sprache an, welcher aber nicht so umfangreich ist (z.B. fehlt hier der Karriere Bereich). Natürlich soll der Suchende aus Spanien die Englische Version im Suchergebnis finden und genau das regele ich über den x-default. Ich sehe da überhaupt keinen zwingenden Zusammenhang zwischen dem x-default, welchen ICH bestimmen möchte und je nach Projekt anders zum Einsatz kommt, und der Fallback Sprache. Wer hat gesagt, dass der Suchende Spanier die Deutschen Inhalte sehen soll? Das passiert ja ggf. nur oder eben halt Zufällig, wenn ich hreflang und/oder x-default nicht konfiguriere. Wenn man also jetzt den x-default so umsetzt, dass er zwangsweise an die Fallback Sprache gebunden ist, wird das nicht alles abdecken, wäre aber zumindest mal ein Anfang wobei ich nicht nachvollziehen kann, dass das so sein muss.

fritzmg commented 5 years ago

Wer hat gesagt, dass der Suchende Spanier die Deutschen Inhalte sehen soll

Du hast das gesagt, weil ihr die Fallbacksprache eben so eingestellt habt ;). Besucht der Spanier die Website, sieht er die Deutschen Inhalte (vorausgesetzt seine Accept-Language ist nicht en).

stevemc04 commented 5 years ago

Wer hat gesagt, dass der Suchende Spanier die Deutschen Inhalte sehen soll

Du hast das gesagt, weil ihr die Fallbacksprache eben so eingestellt habt ;)

Und genau darum brauche ich den x-default damit ich über diesen dem Spanier und Konsorten sagen kann, dass er Englisch bekommt bzw. Google sage ich das :-) Projekte haben da einfach sehr unterschiedliche Anforderungen.

fritzmg commented 5 years ago

Nein, x-default ist nur für die Suchmaschine. Ruft der Spanier https://example.org/ auf, sieht er in eurem Fall die Deutschen Inhalte, was meiner Meinung nach eine Falschkonfiguration ist.

stevemc04 commented 5 years ago

Nein, x-default ist nur für die Suchmaschine. Ruft der Spanier https://example.org/ auf, sieht er in eurem Fall die Deutschen Inhalte, was meiner Meinung nach eine Falschkonfiguration ist.

Es geht nicht darum, dass der Spanier eine Seite aufruft. Es geht darum, dass er das Suchergebnis im SERP in seiner Sprache bzw. durch den x-default eben in Englisch ausgeliefert bekommt. Das hat halt was mit dem Projekt zu tun und das wie und warum kann halt immer differieren.

Aber hey, ich kann es ja immerhin noch manuell setzen, was ich dann erst mal auch so machen werde :-)

fritzmg commented 5 years ago

Ich stelle einfach in Frage, warum ihr das so gemacht habt und ob man wirklich eine separate Einstellung für x-default braucht. Meiner Meinung nach sollte die x-default Language einer Seite immer die eingestellte Fallback Sprache sein (sofern nicht individuell eingestellt). Die Fallback Sprache ist nicht

die Seite mit der "Muttersprache" und der breitesten Struktur

sondern einfach nur der Fallback für den Fall, wenn keine Sprache der Seitenbäume einer Domain auf die Acccept-Language eines Requests zutrifft - und damit genau dieselbe technische Thematik wie die x-default Sprache für Suchmaschinenergebnisse.

Wenn ihr wollt dass ein nicht Englischer oder nicht Deutscher Benutzer immer die englischen Suchergebnisse angezeigt bekommt (falls anwendbar), dann wollt ihr doch theoretisch sicher auch, dass dieser Besucher die Englische Seite sieht, wenn er sie besucht.

stevemc04 commented 5 years ago

Ich stelle einfach in Frage, warum ihr das so gemacht hat und ob man wirklich eine separate Einstellung für x-default braucht. Meiner Meinung nach sollte die x-default Language einer Seite immer die eingestellte Fallback Sprache sein. Die Fallback Sprache ist nicht

die Seite mit der "Muttersprache" und der breitesten Struktur

sondern einfach nur der Fallback für den Fall, wenn keine Sprache der Seitenbäume einer Domain auf die Acccept-Language eines Requests zutrifft - und damit genau dieselbe technische Thematik wie die x-default Sprache für Suchmaschinenergebnisse.

Wenn ihr wollt dass ein nicht Englischer oder nicht Deutscher Benutzer immer die englischen Suchergebnisse angezeigt bekommt (falls anwendbar), dann wollt ihr doch theoretisch sicher auch, dass dieser Besucher die Englische Seite sieht, wenn er sie besucht.

Ich verstehe Dich und danke, dass Du das so explizit durchgehst. Grundsätzlich ist das so ein gefühlter Standard, den Du beschreibst aber das ist in der Praxis halt nicht immer so. Vielleicht auch einfach, weil Projekte manchmal historisch (falsch) wachsen oder die EN Version eher so ein "nice to have ist" bei diesem Projekt. Klar, somit kann man ggf. eh auf alles verzichten. Gefühlt war es halt für mich so, dass wenn ich frei bin in der Zuweisung des x-default, alle abdecken kann. Mir ist aber natürlich bewusst, dass so ein Modul eine schlüssige und konsistente Umsetzung benötigt.

Ich gehe da gerne nochmal selbstkritisch an mein Projekt und eruiere mal, ob es ggf. wirklich falsch aufgesetzt wurde. Wenn das der Fall ist, wird ja am Ende wieder ein Schuh draus. Besteht so allerdings schon ein paar Jahre. Egal. Also wenn sich der x-default an der Fallback Sprache orientiert ist das ja, wie schon erwähnt, eine wichtige und Zeitsparende Ergänzung. Und es ist auch weniger Fehleranfällig.

fritzmg commented 5 years ago

Selbst wenn es nur ein "nice to have" ist. Warum die Fallbacksprache nicht trotzdem auf Englisch setzen?

Du musst dich ja bloß fragen: was soll ein Nicht-Deutscher sehen, wenn er die URL deiner Website in seinem Browser eingibt. Deutsch oder Englisch? Und ist die Antwort auf diese Frage nicht dieselbe, wie auf die Frage, in welcher Sprache er Suchmaschinenergebnisse sehen soll?

contaoacademy commented 4 years ago

Wie ist hier der Stand?

Um das Problem mit dem fehlenden x-default zu lösen, wäre vermutlich die Hauptsprache = Sprachen-Fallback als x-default auszugeben.

Wenn ich das richtig verstehe, hat das @fritzmg auch schon vorgeschlagen.

aschempp commented 3 years ago

Implementiert in ce372693de382d0e51320b40c5e7d8752593b50b