RSS

zapisz się: RSS Artykuły

szukaj

SEO mod - sitemap.xml

Komentarze 1

XMLPewnego dnia na innej swojej stronce opartej na sNews przypadkowo zauważyłem, że nie ma zaindeksowanych ważnych stron w Google. Zdziwiło mnie to, bo mam bardzo dobre linkowanie wewnętrzne i łatwo jest odnaleźć te strony. Niemniej jednak pomyślałem, że należy zrobić mapę strony dla Google ;)

Chwilkę szukałem i znalazłem odpowiedniego moda. Jego autorem jest... w sumie nie wiem kto, ale jest to Polak :) Co robi dany mod? Po pierwsze robi mapę strony w formacie xml na podstawie domyślnej mapy strony dla użytkowników w sNews. Po drugie kompresuje mapę strony do formatu xml.gz. Po trzecie wysyła automatycznie skompresowaną mapę strony do Google. Kiedy to wszystko się dzieje? W momencie odwiedzenia przez kogokolwiek wbudowanej mapy strony sNews pliki z mapą strony są aktualizowane, a skompresowana mapa zostaje wtedy wysłana do Google. Jeśli jesteśmy zalogowani jako admin i odwiedzimy wbudowaną mapę strony to dodatkowo wyświetli się nam poniżej informacja o przesłaniu mapy xml do Google. Na własne potrzeby dodałem do adresów w mapie xml ukośnik na końcu, bo w oryginale utworzone linki w mapie nie miały końcowego ukośnika. Ok, w takim razie przystępujemy do zmian. Otwieramy "snews.php" i przed funkcją wbudowanej mapy strony (// SITEMAP) wklejamy następujący kod:

// SITEMAP XML AND GZIP
// funkcja przygotowywujaca tag xml
function maketag($url,$changefreq,$priority) {
  $tag="\t<url>\n\t\t<loc>".$url."</loc>\n\t\t<changefreq>".$changefreq."</changefreq>
  \t\t<priority>".$priority."</priority>\n\t</url>\n";
  return $tag;
  }
  
function sitemapgz() {
  //naglowek
  DEFINE('NL',"\n");
    $xml='<?xml version="1.0" encoding="UTF-8"?>'.NL;
  $xml.='<urlset xmlns="http://www.google.com/schemas/sitemap/0.84" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 
  http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">'.NL;
  //stale strony
	$link = _SITE;
  $xml.=maketag($link,'daily','1');
	$xml.=maketag($link.'archive/','daily','0.8');
	
	$query = "SELECT title,seftitle
		FROM "._PRE.'articles'."
		WHERE position = 3
			AND published = 1
			AND visible = 'YES'
		ORDER BY artorder ASC, date, id";
	$result = mysql_query($query);
	while ($r = mysql_fetch_array($result)) {
    $xml.=maketag($link.$r['seftitle'].'/','weekly','0.7');
	}
	$xml.=maketag($link.'contact/','monthly','0.3');
	$xml.=maketag($link.'sitemap/','daily','0.8');
  //artykuly
	$art_query = 'SELECT title, seftitle, date
		FROM '._PRE.'articles'.'
		WHERE position = 1
			AND published = 1
			AND visible = \'YES\'';
	$cat_query = 'SELECT id, name, seftitle, description, subcat
		FROM '._PRE.'categories'.'
		WHERE published = \'YES\'
			AND subcat = 0
			ORDER BY catorder,id';
	$cat_result = mysql_query($cat_query);
	if (mysql_num_rows($cat_result) == 0) {
	///
	} else {
		while ($c = mysql_fetch_array($cat_result)) {
			$category_title = $c['seftitle'];
			$xml.=maketag($link.$category_title.'/','weekly','0.8');
			$catid = $c['id'];
			$query = $art_query.' AND category = '.$catid.' ORDER BY id DESC';
			$result = mysql_query($query);
			if (mysql_num_rows($result) > 0) {
				echo '<ul>';
			}
			while ($r = mysql_fetch_array($result)) {
        $xml.=maketag($link.$category_title.'/'.$r['seftitle'].'/','weekly','0.8');
			}
			if (mysql_num_rows($result) > 0) {
			///
			}
			$subcat_result = mysql_query('SELECT id, name, seftitle, description, subcat
				FROM '._PRE.'categories'.'
				WHERE published = \'YES\'
					AND subcat = '.$c['id'].'
				ORDER BY catorder ASC');
			if (mysql_num_rows($subcat_result) > 0) {
      ///
			}
			while ($s = mysql_fetch_array($subcat_result)) {
				$subcat_title = $s['seftitle'];
				$subcat_name = $s['name'];
				$xml.=maketag($link.$category_title.'/'.$subcat_title.'/','weekly','0.8');
				$subcatid = $s['id'];
				$query = $art_query.' AND category = '.$subcatid.' ORDER BY id DESC';
				$artresult = mysql_query($query);
				if (mysql_num_rows($artresult) > 0) {
        ///
				}
				while ($r = mysql_fetch_array($artresult)) {
          $xml.=maketag($link.$category_title.'/'.$subcat_title.'/'.$r['seftitle'].'/','weekly','0.8');
				}
				if (mysql_num_rows($artresult) > 0) {
				//
				}
				///
			}
			if (mysql_num_rows($subcat_result) > 0) {
				///
			}
			///
		}
		///
	}
	$xml.='</urlset>'.NL;

	//zpis
	$sitemapfile=fopen("sitemap.xml",'w');
  fwrite($sitemapfile,$xml);
  fclose($sitemapfile);
	//kompresja
	$sitemapgfile=fopen("sitemap.xml.gz",'w');
  $gzfile=gzopen("sitemap.xml.gz", 'w');
  gzwrite($gzfile, $xml);
  gzclose ($gzfile);
  fclose($sitemapgfile);
 //ping do google
  $handcurl = curl_init();
  $url='http://www.google.com/webmasters/sitemaps/ping?sitemap='.$link.'sitemap.xml.gz';
  curl_setopt($handcurl, CURLOPT_URL, $url);
  curl_setopt($handcurl, CURLOPT_RETURNTRANSFER, 1);
  $answer = curl_exec($handcurl);
  echo _ADMIN ? $answer : '';
  curl_close($handcurl);
}

Pierwszy zaznaczony fragment jest bardziej nastawiony na Google. Jeśli chcemy, aby nasza mapa strony była bardziej przyjazna również dla innych przeglądarek to możemy ten fragment zamienić na:

$xml='<?xml version="1.0" encoding="UTF-8"?>'.NL;
  $xml.='<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"
         xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'.NL;

Drugi zaznaczony fragment powoduje wyświetlanie się niepotrzebnych znaczników <ul> na wbudowanej mapie strony sNews. Fragment ten można usunąć lub zakomentować stawiając 2 ukośniki przed tą linijką (//).

Kolejny zaznaczony fragment odpowiada za wysłanie mapy strony do Google. Jeśli nie chcemy, aby automatycznie była wysyłana przy każdym odwiedzeniu wbudowanej mapy strony to możemy zakomentować lub usunąć ten fragment. Mapa XML i jej skompresowana wersja nadal będą aktualizowane, z tym, że nie będzie wysyłany ping do Google.

Jedyne co jeszcze musimy zrobić to umieścić tą funkcję na końcu funkcji sitemap() - przed ostatnim zamykającym nawiasem "}". Umieszczamy tam:

sitemapgz();

Całość wysyłamy na serwer i odwiedzamy stronę www.twojadomena.pl/sitemap/ aby wygenerować mapę strony dla Google i ewentualnie ją wysłać.

Podziel się

Bookmark and Share

  1. arekz
    arekz napisał(a):

    tego właśnie szukałem, bo od jakiegoś czasu dotychczasowy googlesitemap.php pod wersją 1.7 jakoś dziwnie kulał, a właściwie nie działał (przynajmniej u mnie). Właśnie dodałem do googla i wygląda że jest OK.

Komentowanie zostało zablokowane