Seite 1 von 1

htaccess: canonical URL im Header für alle files

Verfasst: 15.09.2018, 16:04
von Rem
Man kann in der htaccess canonical URLs setzen...
Header add Link 'https:/...' rel="canonical"'

Da ich canonical metas bislang nirgends nutze, würde ich mich für eine generelle Lösung für alle meine Files interessieren.

also z.B.
https://domain.com/ordner/bild1.gif soll im Header
Link '<https://www.domain.com/ordner/bild1.gif>'; rel="canonical"
ausgeben. Ditto pdf, html, egal wo gespeichert.

Ich wäre um eine Lösung dankbar!

Verfasst:
von

Verfasst: 17.09.2018, 09:01
von staticweb
> Man kann in der htaccess canonical URLs setzen...

Das wäre mir neu.

Du kannst maximal die URLs so "umbiegen" damit sie passend ausgeliefert werden.

Verfasst: 17.09.2018, 09:56
von Hanzo2012
staticweb hat geschrieben:Das wäre mir neu.
Geht seit 2011 ;)
https://moz.com/blog/how-to-advanced-re ... tp-headers
Das über einen Header zu machen ist sinnvoll, da die alte Methode über ein <link>-Element nur für HTML geht. Die Header-Methode funktioniert für alle Arten von Ressourcen, z. B. Bilder und PDF-Dateien.
Zur Frage: Hier hat jemand ein Beispiel gepostet, wie es mit Hilfe eines Rewrites gehen könnte, der nichts tut außer eine Umgebungsvariable zu setzen: https://geoffkenyon.com/how-to-add-cano ... p-headers/

Code: Alles auswählen

RewriteRule &#40;&#91;^/&#93;+&#41;\.pdf$ - &#91;E=FILENAME&#58;$1&#93;
<FilesMatch "\.pdf$">
 Header add Link "< https&#58;//geoffkenyon.com/uploads/%&#123;FILENAME&#125;e.html >; rel="canonical""
</FilesMatch>
Wenn das für dein Setup nicht mächtig genug ist (z. B. weil du irgendwelche String-Operationen durchführen musst, die du hiermit nicht hinkriegst), dann solltest du dir RewriteMaps anschauen (Feature von mod_rewrite). Damit kannst du die Logik in ein Programm auslagern oder eine Lookup-Tabelle angeben.

Verfasst: 17.09.2018, 10:17
von staticweb
> Geht seit 2011

OK, dann hatte ich wohl zu kurz recherchiert. :-)

Verfasst: 17.09.2018, 19:59
von Rem
@Hanzo!
Genau da drüber bin ich auch gelaufen. Also über das geoffkenyon.com-Beispiel.

Ich bin einfach nicht mit htaccess firm. Meine Variante mit Filesmatch lief nicht ;-). Aber ich setze mich da vielleicht nochmals hin, weil das für mich ein relativ gangbarer Ausweg aus meinem Dilemma wäre - also der Furcht, dass meine Bilder unter einer anderen, womöglich temporären URL im Google-Index erscheinen.

Nur so nebenbei: die Anwendung.
Ich erhoffe mir, dass die Bilder dann mit der folgenden kanonischen URL
https://www.domain.com/folder/xyz/001a.gif
z.B. unter
https://5456787.cdn.com/folder/xyz/001a.gif laufen könnte. Ohne dass Google die URL je irgendwann auflistet oder dass zuviel "Linkjuice" abwandert.

Eine generelle Rule wäre verdammt nett... ;-)

Für alles aber auch für gewisse Dateien. Ja und klar: wenn es so einfacher geht, erspare ich den Eintrag im <head>-Bereich von html-Dateien auch noch.

Verfasst: 17.09.2018, 22:33
von Rem
Da meint jemand, er hätte in jedem Unterverzeichnis eine htaccess laufen LOL:
I set up individual .htaccess files in all of the sub-directories and used <FilesMatch "\.(pdf|gif|jpg|jpeg|png|ico|swf|js|css)$"> Header set Link '<https://www.example.com/>; rel="canonical"'</FilesMatch> to add Canonicals to every file in that directory.
Nein, irgendwie geht das nicht (in einem Verzeichnis untendran erhalte ich den sicheren 500er)... Und bei verschachtelten Domains sollte man irgendwie auf der Root-htaccess den Path und den Filename als Variablen verarbeiten können...

Verfasst: 17.09.2018, 23:12
von Rem
Das hier sieht für mich am vernünftigsten aus, um darauf aufzubauen:
Quelle: https://forums.iis.net/t/1199689.aspx
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|webp|html|htm)(\.gz)?(\?.*)?$">
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* - [E=CANONICAL:https://%{HTTP_HOST}%{REQUEST_URI},NE]
RewriteCond %{HTTPS} =on
RewriteRule .* - [E=CANONICAL:https://%{HTTP_HOST}%{REQUEST_URI},NE]
</IfModule>
<IfModule mod_headers.c>
Header set Link "<%{CANONICAL}e>; rel=\"canonical\""
</IfModule>
</FilesMatch>
Allerdings erzeugt das:
Link: ; rel="canonical"
EDIT: Scheinbar haben die Leute Leerzeichen bei
<%{CANONICAL}e>
ausgelassen. Dazu gleich noch eine Anmerkung.

Verfasst: 18.09.2018, 10:39
von Rem
OK, ich habe das folgende für mich jetzt am laufen. Ich weiss nicht, warum die Leerzeichen ["< %{CANONICAL}e >"] bei der Ausgabe benötigt werden, und ob das für die Spider einen Unterschied macht. Aber das Beispiel von Geoff (zitiert von Hanzo) nutzt ja auch Leerzeichen.

Code: Alles auswählen

<FilesMatch "\.&#40;ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|webp|html|htm&#41;&#40;\.gz&#41;?&#40;\?.*&#41;?$"> 
RewriteRule .* - &#91;E=CANONICAL&#58;https&#58;//%&#123;SERVER_NAME&#125;%&#123;REQUEST_URI&#125;,NE&#93;  
Header set Link "< %&#123;CANONICAL&#125;e >; rel=\"canonical\"" 
</FilesMatch>
Insofern scheint mir das mal vernünftig.

Verfasst: 18.09.2018, 11:58
von Rem
Noch eine Kurze Anmerkung:
Meine CDN-Distribution gibt nun tatsächlich
Link => < https://www.domain/folder/folder/folder ... 728x90.gif >; rel="canonical"
im Header aus.
Das heisst, dass der Approach es mir ermöglicht, Bilder entweder vom eigenen Server, vom CDN, oder von sonst einem Bilderhost in die Website einzufüllen, mit einer minimalen Gefahr, dass in der Google Bildersuche dann die Bilder unter einer temporären URL erscheinen.

Ich könnte z.B. auch einen zweit-Server unter "static.domain.com" betreiben und dort mittels httaccess dann wieder "www." als Teil einer canonical URL angeben. Ist natürlich besser, wenn man die volle Kontrolle und eine eigene htaccess auf dem Zweitserver hat. Aber die meisten CDNs kopieren die http headers ohne zu Murren.

Verfasst: 18.09.2018, 12:49
von staticweb
Es sollte dir aber klar sein, dass ein URL-Wechsel deiner Bilder eine Neuindexierung in der Bildersuche zur Folge haben kann. Die ist wohl etwas sensibler als die Websuche.

Verfasst: 18.09.2018, 14:05
von Rem
@staticweb:
ich werde mich vorsichtig rantasten. Also mal in einem Unterverzeichnis starten. Wenn es schiefläuft könnte die Konsequenz sein, z.B. alle Bilder auf eine Subdomain zu zügeln (dann erhalte ich dort völlige Flexibilität mit CNAME) und die 1-3 Mt Neuindexierung auszusitzen. Allerdings ist auch hier - bei Anwendung eines CDNs - die Absicherung mittels rel="canonical" interessant.

Die htaccess-Regeln sind aber wohl auch für andere Anwendungen nützlich. Z.B. falls man http und https parallel betreiben muss/will, kann man ja durchgehende rel="canonical" auf die bevorzugte Variante setzen. Nur als Beispiel. Wobei ich persönlich eher umleiten würde. Aber:

Lass mich etwas aus meiner Praxis erwähnen: ich bin kürzlich umgezogen und mein alter Provider hatte für htaccess "RewriteOptions Inherit" als Standard. Bis ich merkte, dass ich beim neuen Hostingprovider "RewriteOptions Inherit" explizit angeben muss, hatte ich bereits hunderte http-Unterseiten aus Foldern mit eigener htaccess wieder im Google Index. Man lernt einfach nicht aus. LOL