Sitemap für Google als xml ausgeben lassen

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Kann es sein, dass das Script ziemlich langsam ist?

Wäre es nicht sinnvoller einen Cronjob daraus zu machen.

Also sitemap.php per Cronjob ausführen lassen und die generiert dann eine sitemap.xml, wie auch bei www.google.com/sitemap.xml

Code wäre wie folgt:

Code: Alles auswählen

<?php
   ob_start();

***************
Hier der sitemapcode
***************

   $page = ob_get_contents();
   ob_end_clean();
   $file = "$path" . "sitemap.xml";
   @chmod($file,0755);
   $fw = fopen($file, "w");
   fputs($fw,$page, strlen($page));
   fclose($fw);
   die();
?>
Den lässt man dann per Cronjob jede Nacht einmal ausführen. Z.B. um 3-4 Uhr Nachts, wo eh wenig los ist und damit wäre die sitemap.xml lokal gespeichert und immer verfügbar ohne lange den Rechner zu belasten, denn bedenkt, dass jede sitemap Anfrage auf die Serverlast geht.

Wer keine Cronjobs unterstützt kann einfach den Service von www.cronjob.de benutzen.

Übrigens Andreas sein Code ist besser was die topicpriority anbelangt. Im Original Code von phpbb.com wird der Fehler gemacht, dass "Ankündigungen" etc. als hohe Priorität angegeben werden.

Das ist aber total Quark. Ankündigungen enthalten meistens absolut unwichtige Informationen.

Wobei ich bei Andreas noch nicht ganz schlau draus werde ;)

Also ein Beitrag der viele Antworten hat ist wichtig.. was genau macht der Zeitbonus aus "alt = schlecht" oder andersrum?

Die priority ist mir ehrlich gesagt noch zu wage. Denn die beliebten "Spamthreads" aus dem Café (Small Talk, Laberecke) füllen dann fast immer die beste Priorität aus.

Dann habe ich noch diesen Code gefunden von Magadoo:

Code: Alles auswählen

<?php 
header("Content-type: text/xml"); 
echo '<?xml version="1.0" encoding="UTF-8"?>'; 
echo "\n"; 
echo '<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">'; 

define('IN_PHPBB', true); 
$phpbb_root_path = './'; // hier der Ordner zu eurem Board
$baseurl = "http://www.maxrev.de/"; // hier die eigene Domain eintragen auch "www" beachten, was euer Standard ist
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

$result = mysql_query("SELECT topic_id, topic_time FROM phpbb_topics"); 
while($row=  mysql_fetch_assoc($result)) 
{ 
      $url = utf8_encode($baseurl.'ftopic'.$row["topic_id"].'.html'); 
      $last_time = date('Y-m-d\TH:i:s',$row['topic_time']); 
      echo "\n<url><loc>".$url."</loc><lastmod>".$last_time."+00:00</lastmod></url>"; 
} 

$i=0; 

$pfad="./"; 
$verz=opendir($pfad); 
while ($file=readdir($verz)) 
{ 
    $path_parts = pathinfo($pfad.$file); 
    if ($path_parts["extension"] == "php") 
    { 
   $i++; 
   $last_time = date('Y-m-d\TH:i:s',filemtime($file)); 
   $filename = basename ($pfad.$file,".php"); 
   echo "\n<url><loc>".$baseurl.$filename.".html</loc><lastmod>".$last_time."+00:00</lastmod></url>"; 
    } 
} 
closedir($verz); 

echo "\n"; 
?> 
</urlset>
Der ist zwar jetzt für Short Urls, aber kann dann ja individuell angepasst werden. Frage welcher ist jetzt besser ;)
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
andreas888
Mitglied
Beiträge: 96
Registriert: 13.09.2004 02:59
Kontaktdaten:

Beitrag von andreas888 »

Hallo mgutt,

ich hab da sowieso eine art Deckelung drin. Treads mit mehr als 8 Beiträgen werden gleich bewertet. (wenn ich mich recht erinnere)
Die Bewertung ist sowieso Nebensache, weil primär geht es nur darum, daß Google schnell die neuen Treads findet, und alle alten kennt.

Eine solche Sitemap zu cachen macht keinen Sinn. Durch ihre jeweilige Aktualität beim Aufruf durch Google ersparst du dir ja gerade eine Menge Servertraffic durch den google Bot, weil der dann sofort weiß, wo die neuen treads sind, und nicht unnötig auf der seite suchen muß.

Das script belastet auch den mysql server nicht extrem, außer du hast wirklich 1Mio Beiträge im Forum, aber dann hast du sowieso einen leistungsfähigen server.

Grüße von Andreas
(mit den Foren ist er hier: http://www.superphotos.info/forum/viewtopic.php?t=128 )

noch ein Tipp von mir für Google: http://www.phpbb.de/viewtopic.php?t=97397
Pacman
Mitglied
Beiträge: 263
Registriert: 23.05.2002 23:15
Wohnort: Berlin
Kontaktdaten:

Beitrag von Pacman »

rkern hat geschrieben:Beispielausgabe: http://alturoforum.gsfnet.de/sitemap.php (mit short-url-mod)
Hi,

wie hast Du das den geschafft, das die Sitemap auch mit den Short URLs ausgegeben wird?

Bei mir sind alles trotzdem die normalen php Endungen :cry:
Pacman
Mitglied
Beiträge: 263
Registriert: 23.05.2002 23:15
Wohnort: Berlin
Kontaktdaten:

Beitrag von Pacman »

Wer den Short URL Mod eingebaut hat, kann die Sitemap.php wie folgt ändern, das auch dort alle Links geändert werden:

Suche:

Code: Alles auswählen

$viewtopic = "viewtopic.$phpEx?" . POST_TOPIC_URL . "=$topic_id"; 



ersetzen durch

Code:

Code: Alles auswählen

$viewtopic = "ftopic" . $topic_id . ".html"; 
Dankeschön nochmal an rkern
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

@ andreas

cachen ist meiner meinung sehr sinnvoll, da die seiten bisher sehr langsam aufgebaut wurden.. klick dich doch mal durch die phpbb foren. ich konnte nicht gerade "geschwindigkeitswunder" entdecken. und da die file eh nur einmal gebraucht wird, kann sie doch ruhig einmal am tag gecached werden. halte ich nicht für zuviel.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
andreas888
Mitglied
Beiträge: 96
Registriert: 13.09.2004 02:59
Kontaktdaten:

Beitrag von andreas888 »

..da die seiten bisher sehr langsam aufgebaut wurden.. klick dich doch mal durch die phpbb foren.
sorry - hab gedacht du meintest speziell die sitemap.php seite. wenns forum langsam läuft, da kannst du meiner meinung mit der sitemap cachen nicht viel erreichen ..

Grüße von Andreas
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

nein damit meine ich allgemein den aufbau der xml seite.

lad die einmal und mach reload. der aufbau der seite dauert viel zu lange.. wenn die jetzt als statische seite gespeichert wäre, müsste das ja viel "schonender" von statten gehen und nicht bei jedem aufruf die datenbank rotieren müssen.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
andreas888
Mitglied
Beiträge: 96
Registriert: 13.09.2004 02:59
Kontaktdaten:

Beitrag von andreas888 »

Hallo mgutt,

Aslo ich find nicht, daß dein forum langsam läuft, aber um auf deine ursprüngliche frage zurückzukommen:
Du bräuchtest ja eigentlich in dem script nur alle 4 Stellen, wo echo vorkommt durch $html .= ersetzen, und am ende des scriptes das $html in eine Datei abspeichern:

Code: Alles auswählen

...
$html .= '</urlset>';


$fp = fopen("sitemap.htm","w");
fputs($fp,$html);
fclose($fp);




function code_utf8($text) {
	$array_1 = array("&","\"","'",">","<","");
	$array_2 = array("&",""","&apos;",">","<","");
	for($x=0;$x<4;$x++){
		$text = str_replace($array_1[$x],$array_2[$x],$text);
	}
	return $text;
}
?>
und dann halt per cronjob das ganze ab und zu aufrufen


Grüße von Andreas
Benutzeravatar
celsius
Mitglied
Beiträge: 43
Registriert: 08.12.2004 13:24
Wohnort: nahe Hildesheim

Beitrag von celsius »

@rkern und alle die helfen können: ich suche den mod als download. der link von rkerns beitrag vom 7.6. auf http://www.phpbb.com/phpBB/viewtopic.php?t=296051 verweist zum download dort auf http://www.streetrod3.com/sitemap_mod.zip, da gibt es aber nix mehr. hat jemand eine alternative?

danke vorab!

:cookie:
Benutzeravatar
Wellness69
Mitglied
Beiträge: 84
Registriert: 06.10.2005 16:27
Wohnort: Jena
Kontaktdaten:

Re: sitemap.php

Beitrag von Wellness69 »

andreas888 hat geschrieben:ich find das auch ein bischen übertrieben, wegen einem sitemap für google extra in der Datenbank änderungen zu machen.

Der folgende Code ist einfacher:

Code: Alles auswählen

<?php 

$phpbb_root_path = '';  // muß angepasst werden, falls eine Ebene unter dem Forumsordner.

define('IN_PHPBB', true); 
include($phpbb_root_path . 'extension.inc'); 
include($phpbb_root_path . 'common.'.$phpEx); 

$userdata = session_pagestart($user_ip, PAGE_INDEX); 
init_userprefs($userdata); 
$script_name = preg_replace('/^\/?(.*?)\/?$/', "\\1", trim($board_config['script_path'])); 
$server_name = trim($board_config['server_name']); 
$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://'; 
$server_port = ( $board_config['server_port'] <> 80 ) ? ':' . trim($board_config['server_port']) . '/' : '/'; 
$server_url = $server_protocol . $server_name . $server_port . $script_name;
if(substr($server_url, -1, 1) != "/") {	$server_url .= "/"; }
$server_url = code_utf8($server_url);
$zeit = time();
$pre_timezone = date('O', $zeit);
$time_zone = substr($pre_timezone, 0, 3).":".substr($pre_timezone, 3, 2);


$result = mysql_query("SELECT topic_id,post_time  FROM " . POSTS_TABLE ) ;
while( $row =  mysql_fetch_assoc($result)) {
	if($last_time[$row["topic_id"]] < $row["post_time"]) { $last_time[$row["topic_id"]] = $row["post_time"]; }
}

echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
	<url>
		<loc>'.$server_url.'</loc>
		<changefreq>always</changefreq>
		<priority>1.0</priority>
	</url>
';


$result = mysql_query("SELECT topic_id,topic_replies,topic_time FROM " . TOPICS_TABLE . " ORDER BY topic_id DESC LIMIT 50000") ;
while( $row =  mysql_fetch_assoc($result)) {
	$topicId = $row["topic_id"] ;
	$alter = $zeit - $last_time[$row["topic_id"]] ;
	$zeitbonus = max(min(round((600000 - $alter ) / 80000),7),0) ;
	$last_time_post = date("Y-m-d\TH:i:s",$last_time[$row["topic_id"]]) . $time_zone ;
	if ($alter < 604800) { $changefreq = 'weekly'; } else { $changefreq = 'monthly'; }
	if ($alter < 84000) { $changefreq = 'daily'; }
	$topicpriority = min(( $row["topic_replies"] + 1 + $zeitbonus ),9) ;
echo "	<url>
		<loc>".$server_url."viewtopic.php?t=$topicId</loc>
		<lastmod>$last_time_post</lastmod>
		<changefreq>$changefreq</changefreq>
		<priority>0.$topicpriority</priority>
	</url>
";
}

echo '</urlset>';


function code_utf8($text) {
	$array_1 = array("&",""","'",">","<","");
	$array_2 = array("&",""","&apos;",">","<","");
	for($x=0;$x<4;$x++){
		$text = str_replace($array_1[$x],$array_2[$x],$text);
	}
	return $text;
}
?>
Diese Sitemap-url meldet man dann bei Google an:
https://www.google.com/webmasters/sitemaps



Ansonsten hier noch ein wichtiger Informationslink:
http://www.google.de/search?hl=de&q=chemtrails
(ich finde webmaster sollten bescheid wissen, was so abläuft !!!)



Grüße von Andreas
ps: wer die urls mit www. anmelden möchte evt. einfach Zeile 14 ändern:
$server_protocol = ( $board_config['cookie_secure'] ) ? 'https://' : 'http://www.';
hab es jetzt gemacht und es wurde von google "Meine Sitemaps" als o.k. bezeichnet

http://www.schwimmbadundsaunabau.de/ - Statistiken sitemap.php Web Vor 1 Stunden Vor 50 Minuten OK

http://www.unserjena.de/ - Statistiken sitemap.php Web Vor 1 Stunden Vor 50 Minuten OK
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“