Kawałek Kodu

Jeśli Twój serwis jest wielojęzykowy, to pewnie użyłeś jednego ze sposóbów na przekazywanie wersji językowej w adresie URL:

  1. Zmienna językowa w query string, np.: http://mojadomena.pl/podstrona?lang=pl
  2. Zmienna językowa jako podkatalog, np: http://mojadomena.pl/en/podstrona/
  3. Zmienna językowa jako subdomena, np: http://en.mojadomena.pl
  4. Zmienna językowa przypisana do domeny (odrębna dla każdej domeny), np: http://mojadomena.pl, http://mojadomena.co.uk

O ile w pierwszym i drugim przypadku budowa mapy jest oczywista, bowiem mapa zawiera wszystkie URL niezależnie od języka, tak w przypadku subdomeny lub domeny wyłącznie dla jednego języka, mapa będzie zawierać URL tylko z tej wersji językowej. A skoro serwis fizycznie zajmuje to samo miejsce na serwerze, tak więc i mapa serwisu dla każdej wersji jezykowej będzie w tym samym miejscu.
Ale przecież zgodnie z sugestią Google plik mapy ma mieć ustaloną nazwę, np. sitemap.xml (dla mapy w formcie XML) lub sitemap.txt (dla mapy w postaci pliku tekstowego). Na pewno nie mogą to być pliki o nazwach sitemap_pl.xml dla wersji polskiej i sitemap_en.xml dla wersji angielskiej.

Jak więc umieścić oddzielne mapy dla każdej wersji językowej na serwerze?

Mapa dla każdej wersji językowej ma być w tym samym pliku, tj. w pliku sitemap.xml. Ale zaraz, zaraz. Przecież adresy URL z każdej wersji językowej nie mogą być wrzucone jednocześnie do tego samego pliku, bo wtedy mapa dostępna z adresu http://mojadomena.pl/sitemap.xml będzie identyczna z mapą dostępną z adresu http://mojadomena.co.uk/sitemap.xml. No właśnie, nie mogą być wrzucone jednocześnie, ale przecież nic nie stoi na przeszkodzie, aby mapa była generowana dynamicznie w zależności od tego z jakiej domeny pochodzi żądanie!

<?php
header('Content-Type: text/xml; charset=utf-8');

echo '<?xml version="1.0" encoding="UTF-8" ?>';
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
  xmlns:image="http://www.google.pl/schemas/sitemap-image/1.1" 
  xmlns:video="http://www.google.pl/schemas/sitemap-video/1.1">';

//Zawartość struktury mapy uzależniamy od wartości zmiennej $_SERVER['SERVER_NAME']

echo '</urlset>';

Możliwe jest jeszcze inne rozwiązanie, mianowicie w zależności od domeny lub subdomeny, możemy z pomocą pliku .htaccess wskazać przeglądarce (a właściwie serwerowi), który fizycznie istniejący (lub nie) plik ma traktować jako plik sitemap.xml.

#Jeśli domena to mojadomena.pl
RewriteCond %{HTTP_HOST} ^mojadomena.pl$
#Przepisz sitemap.xml na sitemap_pl.xml
RewriteRule sitemap.xml sitemap_pl.xml
#Jeśli domena to mojadomena.co.uk
RewriteCond %{HTTP_HOST} ^mojadomena.co.uk$
#Przepisz sitemap.xml na sitemap_en.xml
RewriteRule sitemap.xml sitemap_en.xml

W ten sposób odwołując się do mapy z adresu http://mojadomena.pl/sitemap.xml nastąpi próba żądania i odczytania pliku sitemap_pl.xml.

 

Przydatne linki:
Tester reguł .htaccess
Mapa witryny dla Google