Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: htaccess? sitemap do kilku domen na jednym serwerze
Forum PHP.pl > Forum > Optymalizacja i pozycjonowanie stron - SEO
freewalker
Witam, spotkałem się ostatnio z problemem, którego wujek google nie wyjaśnia mi zbyt oczywistym językiem.

Zacznijmy od podstaw:
- mam jeden serwer
- na ten serwer kierują 3 domeny: pl, de, co.uk, zależnie od domeny ustawia się odpowiedni język strony i cała zawartość

Mam sitemap gotowe i podpięte pod google dla domeny .pl, jak ustawić sitemap dla reszty domen? Nie mogę do jednego pliku wrzucać, bo będzie się to gryzło z SEO i indexowanie np. niemieckich linków pod polską domeną nie wchodzi w rachubę

Potrzebuję odpowiedniej komendy w htaccess? Albo robots?
Coś w stylu (napiszę w php i każdy załapie;P )

switch($domena)
{
case "pl": zaladuj_sitemap_polska();break;
case "de": zaladuj_sitemap_niemcy();break;
case "uk": zaladuj_sitemap_anglia();break;
}

Oczywiście nie bierzcie mnie za totalnego idiotę i wiem, że takiego kodu nie wstawię w htaccess ani robots;) Potrzebuję analogicznej alternatywy.

W robots.txt mam obecnie:
Sitemap: http://mojastrona.pl/sitemap1pl.xml

ale dodanie kolejnej linijki z odpowiednią domeną i plikiem nie rozwiązuje sprawy?

Z góry dziękuję mądrym głowom smile.gif
trueblue
Dlaczego kodu nie wstawisz w robots.txt? Przecież możesz go parsować w php.
W robots.txt powinien być pełen URL do sitemap (z domeną).
freewalker
Czyli dodanie w robots.txt:

Sitemap: http://mojastrona.pl/sitemap1pl.xml
Sitemap: http://mojastrona.de/sitemap1de.xml
Sitemap: http://mojastrona.co.uk/sitemap1uk.xml

w zupełności wystarczy? I będzie to poprawnie interpretowane przez googla i inne roboty?
trueblue
Dla każdej domeny generujesz inną zawartość robots.txt
freewalker
Dzięki, a możesz podać przykład jak to zrobić?
freewalker
ale to nie rozwiąże problemu, jak wygeneruję robots.txt i w tym samym czasie na innej domenie będzie próba uzyskania do robots.txt - wygeneruje nowy plik nadpisując poprzedni, wszystko byłoby ok gdyby nie fakt, że może to nastąpić w tym samym czasie przez co któraś z domen uzyska błąd zapisu do pliku i nie powstanie robots.txt

Chyba, że chodzi o parsowanie pliku txt przez php i wyrzucenie odpowiedniej zawartości przez echo - ale z drugiej strony nie chcę dodawać rozszerzenia txt dla parsera php bo mam inne pliki tekstowe na serwerze i wtedy one nie będą poprawnie wyświetlane - a zastosowanie zmiany we wszystkich plikach txt nie wchodzi w rachubę...

Jakieś lepsze rozwiązanie?
trueblue
Chodzi dokładnie o parsowanie, to o czym pisze w artykule.
Nie wiem dlaczego sądzisz, że z innymi plikami będziesz mieć problem, przecież jest dyrektywa, która sugeruje parsowanie tylko test.txt.

Możesz również utworzyć regułę przepisującą w .htaccess, nie mając pliku tekstowego lecz php.
freewalker
Dzięki, zrobiłem jak w tym linku co podałeś - w sumie słuszna droga ale teraz nasuwa mi się pytanie, bo zrobiłem tak w robots.txt:

  1. <?php
  2. if($_SERVER['SERVER_NAME']=="mojastrona.co.uk") echo "Sitemap: http://mojastrona.co.uk/sitemap1uk.xml";
  3. elseif($_SERVER['SERVER_NAME']=="mojastrona.de") echo "Sitemap: http://mojastrona.de/sitemap1de.xml";
  4. ?>
  5. User-agent: magpie-crawler
  6. Disallow: /
  7.  
  8. User-agent: WikiDo
  9. Disallow: /
  10.  
  11. User-agent: AhrefsBot
  12. Disallow: /
  13.  
  14. User-agent: MJ12bot
  15. Disallow: /


teraz wszystko co poza klamrami php jest parsowane jako html. Aby zachować strukturę robots.txt , w której każda dyrektywa powinna być od nowej linii powinienem używać <br/> żeby przejść do następnej linii? Bo obecnie po wyświetleniu mam wszystko w jednej linii pisane i raczej nie jest to dobrym plikiem robots.

Pytanie jeszcze odnośnie crawlerów, czy one zawsze "wchodzą" na plik tak jak użytkownik? PHP zawsze wyświetli taką samą wartość SERVER_NAME dla robota jak i internauty? Bo jestem zielony w robotach smile.gif
trueblue
Wszystko poza klamrami jest parsowane jako html?
Pozostawię to bez odpowiedzi.

https://www.google.pl/search?q=php+text+files+newline
Pyton_000
A może po prostu ustawić

header("Content-Type: text/plain");

zamiast kombinować?
trueblue
Nie pomoże to na zbitkę:
Kod
Sitemap: http://mojastrona.pl/sitemap1pl.xmlUser-agent: magpie-crawler
Pyton_000
Albo ja mam problem z głową albo...

  1. <?php
  2. header("Content-Type: text/plain");
  3. if($_SERVER['SERVER_NAME']=="mojastrona.co.uk") echo "Sitemap: <a href="http://mojastrona.co.uk/sitemap1uk.xml&quot;;" target="_blank">http://mojastrona.co.uk/sitemap1uk.xml";</a>
  4. elseif($_SERVER['SERVER_NAME']=="mojastrona.de") echo "Sitemap: <a href="http://mojastrona.de/sitemap1de.xml&quot;;" target="_blank">http://mojastrona.de/sitemap1de.xml";</a>
  5. else echo "Sitemap: <a href="http://mojastrona.pl/sitemap1pl.xml&quot;;" target="_blank">http://mojastrona.pl/sitemap1pl.xml";</a>
  6. ?>
  7.  
  8. User-agent: magpie-crawler
  9. Disallow: /
  10.  
  11. User-agent: WikiDo
  12. Disallow: /
  13.  
  14. User-agent: AhrefsBot
  15. Disallow: /
  16.  
  17. User-agent: MJ12bot
  18. Disallow: /


Output:
Kod
Sitemap: http://mojastrona.pl/sitemap1pl.xml
User-agent: magpie-crawler
Disallow: /

User-agent: WikiDo
Disallow: /

User-agent: AhrefsBot
Disallow: /

User-agent: MJ12bot
Disallow: /
trueblue
Albo złamałeś linię, czego nie było:)

Tak, można headerem.
freewalker
Temat do zamknięcia, poradziłem sobie traktując łamanie wiersza htmlowym <br/>, sprawdzając plik robots.txt przechodzi pozytywnie testy pod każdą domeną. Dzięki za pomoc:)

Cytat(trueblue @ 10.02.2016, 21:11:48 ) *
Wszystko poza klamrami jest parsowane jako html?
Pozostawię to bez odpowiedzi.

https://www.google.pl/search?q=php+text+files+newline


dobra dobra, już nie czepiajmy się słówek, niech będzie "wyświetlane" bo fakt, nie parsujemy htmla w ten sposob ;D
trueblue
Nie łam wiersza żadnym <br/>. Popatrz jak to będzie wyglądać w źródle i jak robot zobaczy...

Przy okazji, skoro masz mapy pod różnymi domenami, to warto również ujednolicić ich nazwy, stosując analogiczną metodę do generacji mapy jak do robots.txt.
Co będzie jeśli robot nie otworzy robots.txt, a będzie chciał otworzyć mapę, myślisz, że znajdzie sitemap1pl.xml?
freewalker
korzystałem z innego sprawdzania i nie było błędów ale w google webmaster tools faktycznie wyłapało łamanie przez <br/>, przesłanie nagłówka text/plain faktycznie rozwiązało sytuację.

Nastawiam się głównie na google, zgłosiłem mapę witryny więc nie powinien mieć problemu z otwarciem sitemap1uk i innych... a wrzucenie wszystkich linków z 3 krajów trochę powiększy plik - chyba, że skorzystam z include..

Czyli sitemap.xml wyłapie każdy robot?
trueblue
A dlaczego miałoby powiększyć plik, przecież do polskiej mapy nie wrzucasz angielskich linków.
freewalker
nie w tym rzecz, jak miałbym robić jeden plik to wrzuciłbym wszystkie linki, polskie, angielskie, niemieckie ale lepiej będzie chyba tak zrobić?:

--plik sitemap.xml
  1. <?php
  2. if(polska) include_once('sitemap_polska.xml');
  3. elseif(niemcy) include_once('sitemap_niemcy.xml');
  4. else include_once('sitemap_anglia.xml');
  5. ?>

oczywiście "polska" i "niemcy" to żadna zmienna ani nic, mają przedstawiać tylko logikęwink.gif

w htaccess dodac parsowanie pliku sitemap.xml przez php, jak wcześniej z robots, a jaki header przesłać, żeby xml był poprawnie odczytany?
trueblue
W tym rzecz, że nie łączysz kilku map dla różnych wersji językowych w jedną. Nigdzie tego nie sugerowałem, pisałem o ujednoliceniu nazwy.

  1. header('Content-Type: text/xml; charset=utf-8');
freewalker
piwo dla wszystkich, temat zamknięty i wyczerpany do cna wink.gif DZIĘKI!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.