Czy pliki robots.txt i sitemap.xml mogą być dynamiczne poprzez przekierowanie .htaccess?


13

Mam witrynę wielojęzyczną i wielodomenową. Działa poprzez unikalną instalację CMS (Drupal), więc mam jeden katalog główny. Więc jeśli mam statyczny plik robots.txt, tam, o ile wiem, mogę wyświetlać pliki tylko dla jednej domeny.

Czy mogę umieścić linię w .htaccess

Redirect 301 /robots.txt /robots.php

(lub równoważna instrukcja i proszę wskazać, która z nich jest dozwolona)

więc przekierowuje do dynamicznego pliku php, w którym mogę podawać różne zawierają zgodnie z $_SERVER['HTTP_HOST']?

I to samo pytanie do sitemap.xml , więc mogę podać dynamiczny sitemap.php, który wskazuje różne linki dla każdej innej domeny.

Problem z brakiem używania .txt i .xml polega na tym, że, jak wspomniano, wszystkie domeny współużytkują jeden katalog fizyczny na komputerze serwera.


Odpowiedzi:


12

Możesz uczynić dowolny plik dynamicznym. Najlepszym sposobem na to nie są przekierowania, ale reguły przepisywania.

RewriteRule ^robots\.txt$  /robots.php [L]

W ten sposób zasilasz go dynamicznym skryptem, ale adres URL się nie zmienia. Większość robotów (w tym Googlebot) będzie podążać za przekierowaniami dla pliku robots.txt , ale niektóre roboty będą zdezorientowane, jeśli wprowadzisz przekierowania.

Pamiętaj, że nawet jeśli zasilasz go PHP, plik robots.txt powinien wydawać się statyczny dla każdego przeszukiwacza dla każdej domeny. Dobrze jest podawać różne treści dla różnych domen, a nawet dla różnych programów użytkownika. Jednak serwowanie różnych treści losowo lub w zależności od pory dnia może naprawdę wprowadzić w błąd wyszukiwarki i zepsuć SEO.


Mapy witryn można nazywać dowolnie. Możesz je przekierować lub użyć reguły przepisywania, aby zasilać je dynamicznie pod tym samym adresem URL. Możesz także nazwać je jak

  • site-a-sitemap.xml
  • site-b-sitemap.xml
  • site-c-sitemap.xml

Następnie zapoznaj się z nimi w pliku robots.txt :

Sitemap: http://www.example.com/example-sitemap.xml

lub prześlij je ręcznie do wyszukiwarek za pomocą narzędzi dla webmasterów lub konsoli wyszukiwania.


Dziękuję obu za odpowiedź. Popraw literówkę, działała instrukcja w3d , więc kod powinien być RewriteRule ^robots\.txt$ robots.php [L]bez symbolu \.
Cesar

Tak, wersja z ukośnikiem byłaby odpowiednia dla pliku apache.conf. W przypadku .htaccess musisz go wyłączyć. Zredagowałem odpowiedź, aby uwzględnić odpowiednią wersję .htaccess.
Stephen Ostermiller

@Cesar Przedrostek ukośnika we wzorcu (tj. ^/robots\.txt$) Byłby wymagany, gdyby ta dyrektywa była w konfiguracji serwera, ale tak, nie będzie pasować w plikach .htaccess dla katalogu. Prefiks ukośnika na podstawieniu (tj. /robots.php) Jest w tym przypadku opcjonalny.
MrWhite

5

Tak, w ten sam sposób każde żądanie może być „dynamiczne”.

Jednak nie przekierowałbyś (jak w przykładowym kodzie), powinieneś wewnętrznie przepisać przy użyciu mod_rewrite. (To samo, co Drupal prawdopodobnie już robi.)

Na przykład w głównym pliku .htaccess:

RewriteEngine On
RewriteRule ^robots\.txt$ robots.php [L]

RewriteEngine powinien wystąpić tylko raz (chociaż tak naprawdę nie ma znaczenia, czy występuje wiele razy).

Musisz tylko upewnić się, że nie koliduje on z żadnymi innymi dyrektywami w pliku .htaccess. Tak, to prawdopodobnie powinien być w pobliżu początku pliku, na pewno przed przednim sterownika .


4

Dynamiczne tworzenie pliku mapy witryny jest w porządku - to dobry sposób na automatyczną aktualizację map witryn.

Uczynienie pliku robots.txt dynamicznym (dla tego samego hosta! Zrobienie tego dla osobnych hostów jest zasadniczo zwykłym plikiem robots.txt dla każdego z nich.) Prawdopodobnie spowodowałoby problemy: nie jest indeksowane za każdym razem, gdy adres URL jest indeksowany z witryny , więc może się zdarzyć, że „zła” wersja zostanie buforowana. Na przykład jeśli indeks pliku robots.txt zostanie zaindeksowany w godzinach pracy, możliwe jest, że zostanie on następnie zapisany w pamięci podręcznej i będzie śledzony przez jeden dzień - co oznacza, że ​​nic nie zostanie zaindeksowane (lub alternatywnie buforowane, gdy indeksowanie jest dozwolone). Na przykład Google indeksuje plik robots.txt raz dziennie w przypadku większości witryn.


Nie widzę tu żadnej różnicy między statycznym a dynamicznym. Chciałbym również użyć części dynamicznej, aby zaoferować różne wersje dla różnych hostów, ale ponieważ wszystkie hosty współużytkują ten sam katalog fizyczny na serwerze komputerowym, jest to sposób na posiadanie robots1.txt, robots2.txt, robots3.txt (liczby czyli w jakiej domenie jesteśmy).
Cesar

Nie sądzę, że ta dynamika oznacza, że ​​za każdym razem chcą wyświetlać różne treści. Chcą tylko zasilić go przez PHP, aby mogli podejmować decyzje na podstawie nazwy hosta w kodzie PHP. Często robots.txt jest dynamiczny, aby obsługiwać różne reguły dla różnych programów użytkownika.
Stephen Ostermiller

2
Tak, jak już wspomniałem, robienie tego dla wielu hostów jest zasadniczo jak posiadanie osobnych plików robots.txt na host, co jest w porządku. Czasami jednak widzimy witryny próbujące kontrolować indeksowanie według pory dnia za pomocą dynamicznego pliku robots.txt - co powoduje wiele problemów.
John Mueller

Słuszna uwaga. Zmodyfikowałem zaakceptowaną odpowiedź z ostrzeżeniem, aby plik robots.txt nie był bardzo dynamiczny.
Stephen Ostermiller

0

Nie trzeba tworzyć sitemap.php, ponieważ: 1. Dla każdego języka możesz uruchomić osobny plik sitemap.xml i określić każdy w konsolach wyszukiwarek. 2. Standardowe pliki map witryn można regularnie zapisywać, aby uwzględnić najnowsze treści, co czyni je w sposób dynamiczny - do tego .php nie jest wymagany. To od wewnętrznego mechanizmu aktualizacji i crona można odtworzyć ten sam plik ze standardowym rozszerzeniem .xml

Pliki Sitemap.xml są statyczne i tylko aktualizacje sprawiają, że są dynamiczne - nie aktualizują się w czasie rzeczywistym. Możliwe jest, że zmuszą ich do ponownego pisania co minutę, ale nie ma takiej potrzeby, ponieważ: 1. Google nie sprawdzi tego w ciągu mniej niż 1 godziny od ostatniego przesłania 2. Gdy pliki map witryn są duże, ponownie je zapisuj często sprawi, że wydajność serwera będzie kaput.

W przypadku dużej ilości danych, która powoduje, że plik mapy witryny jest większy niż 50 MB, wymagany jest system z wieloma mapami witryn. Oznacza to, że sitemap2,3 ... .xml doda się do listy pliku głównego, ale zawartość tych plików pozostaje również stała do czasu odtworzenia tych plików (na przykład przez crona).

Należy również wspomnieć, że gdy wyszukiwarka uzyska dostęp do pliku, nie wróci do niego bardzo szybko (chyba że zostanie to zrobione ręcznie). Potwierdza to, że nie ma potrzeby tworzenia aktualizacji sitemap.php w czasie rzeczywistym, ponieważ zwykły sitemap.xml sam w sobie może być dynamiczny, aktualizując nowe treści w ciągu dnia lub tygodnia.

Nie mogę wymyślić żadnych profesjonalistów korzystających z sitemap.php. Nie przyniesie to żadnego pożytku, ponieważ istnieją inne lepsze / właściwe sposoby korzystania z tych plików.


Dynamika może być preferowana z kilku powodów: mapy witryn zajmują dużo miejsca na dysku, a dynamiczne generowanie nie zajmuje żadnego miejsca. Mapy witryn muszą być aktualizowane, a dynamiczne mapy witryn mogą być łatwym sposobem.
Stephen Ostermiller
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.