Sprawdzanie poprawności linków
Podczas zmiany silnika serwisu natrafiłem na pewien problem
Nowe adresy artykułów nie pokrywały się ze starymi adresami. Stare adresy wyglądały w ten sposób : http://marcinmazurek.com.pl/index.php?v=art&i=1 . Nowe adresy byłe przyjazne dla oka i SEO czyli: http://marcinmazurek.com.pl/strona-glowna. Ze względu na aspekty SEO, postanowiłem zrobić redirect, każdego starego adresu na nowy. Po to aby, nie było nieistniejących stron (404) i fajnie przekierować użytkownika na nowy adres, z tym samą treścią. Wszystko przebiegło sprawnie, natomiast miałem problem jak sprawdzić czy wszystkie redirecty działają poprawnie. Ponieważ ilość linków do przeklikania była bardzo duża postanowiłem, napisać sobie skrypt który to za mnie zrobi. W pliku XML miałem (dla ułatwienia) już wszystkie adresy które chciałem sprawdzić. Poniżej znajduje się skrypt który sprawdza czy jest robiony poprawny redirect "HTTP/1.0 301 Moved Permanently". Ponieważ nie przewidywałem jakiegoś większego zapętlania redirectów, dlatego skrypt przewiduje tylko 2 redirecty 301.
Zawartość pliku urls.xml
Kod PHP
Wynik działania skryptu
Nowe adresy artykułów nie pokrywały się ze starymi adresami. Stare adresy wyglądały w ten sposób : http://marcinmazurek.com.pl/index.php?v=art&i=1 . Nowe adresy byłe przyjazne dla oka i SEO czyli: http://marcinmazurek.com.pl/strona-glowna. Ze względu na aspekty SEO, postanowiłem zrobić redirect, każdego starego adresu na nowy. Po to aby, nie było nieistniejących stron (404) i fajnie przekierować użytkownika na nowy adres, z tym samą treścią. Wszystko przebiegło sprawnie, natomiast miałem problem jak sprawdzić czy wszystkie redirecty działają poprawnie. Ponieważ ilość linków do przeklikania była bardzo duża postanowiłem, napisać sobie skrypt który to za mnie zrobi. W pliku XML miałem (dla ułatwienia) już wszystkie adresy które chciałem sprawdzić. Poniżej znajduje się skrypt który sprawdza czy jest robiony poprawny redirect "HTTP/1.0 301 Moved Permanently". Ponieważ nie przewidywałem jakiegoś większego zapętlania redirectów, dlatego skrypt przewiduje tylko 2 redirecty 301.
Zawartość pliku urls.xml
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://marcinmazurek.com.pl/index.php?v=art&i=1</loc> </url> <url> <loc>http://marcinmazurek.com.pl/index.php?v=art&i=12</loc> </url> </urlset>
Kod PHP
$xml_file = 'urls.xml'; $urls = simplexml_load_file($xml_file); foreach($urls as $url) { sleep(1); //czekamy 1 sekundę $header = get_headers($url->loc, 1); //Sprawdzam czy nagłówek odpowiedzi to 200 if($header[0] == 'HTTP/1.1 200 OK') { echo 'OK 200 : '.($url->loc); } //Sprawdzam czy nagłówek odpowiedzi to 301 elseif($header[0] == 'HTTP/1.0 301 Moved Permanently') { echo 'OK 301 : '; //Pobieram nagłówek nowego adresu strony $header['Location'] $header_301 = get_headers($header['Location'], 1); //Sprawdzam czy nagłówek odpowiedzi to 200 if($header_301[0] == 'HTTP/1.1 200 OK') { echo 'OK '.($header['Location']); } elseif($header_301[0] == 'HTTP/1.0 301 Moved Permanently') { echo 'OK 301 : Kolejne przekierowanie'; //Tutaj powinniśmy znowu sprawdzam następny adres :który znajduje się w $header_301['Location'] } //Jeśli jest inny nagłówek odpowiedzi else { echo 'Wystąpił błąd'; } } else { echo 'Wystąpił błąd'; } echo "\n"; }
Wynik działania skryptu
OK 301 : OK http://marcinmazurek.com.pl/o-mnie?v=art&i=1 OK 200 : http://marcinmazurek.com.pl/index.php?v=art&i=12
Dział: