Sitemap mit PHP erstellen

Zuletzt aktualisiert: Dienstag, 03. Januar 2017 Geschrieben von Jan Pionzewski

Eine Sitemap zu haben, ist unabdinglich. Sie dient bei einem größeren Web-Projekt nicht nur als Übersicht, sondern kann vor allen Dingen auch an Google und andere Suchmaschinen übermittelt werden. Eine Sitemap bildet dabei die Grundlage für den Crawler der Suchmaschine und sagt diesem auch, ob es neue oder aktualisierte Inhalte gibt.

Mit PHP lässt sich eine solche Sitemap automatisch erstellen. Wie das funktioniert, habe ich in diesem Artikel für dich beschrieben.

 


Sitemap mit einem PHP-Script erstellen lassen

Mit dem nachstehenden PHP-Script kannst du dir eine eigene Sitemap erstellen lassen. Du musst lediglich einige Variablen entsprechend deiner Bedürfnisse anpassen. Anschauen lässt sich die Sitemap hinterher ganz einfach, in dem du die Datei öffnest, in der das Script enthalten ist.


Das nachstehende Script habe ich gefunden auf http://www.plop.at/de/php.html. Die Credits für das Script (siehe Kommentarbereich im Code-Beispiel, sowie an einigen anderen Stellen innerhalb des Scripts) bleiben daher natürlich vorhanden.

Die im Anzeigebeispiel rot markierten Inhalte kannst (und solltest) du nach deinen Bedürfnissen anpassen. Das Script crawlt alle Verzeichnisse nach der gewünschten Dateiendung. Lediglich die definierten Ausnahmen werden nicht gecrawlt.


Code-Beispiel:

<?
/*************************************************************
 Simple site crawler to create a search engine XML sitemap
 Version 0.2
 Free to use, without any warranty
 Written by Elmar Hanlhofer http://www.plop.at 01/Feb/2012
 ChangeLog:
 ----------
 Version 0.2 2013-01-16  
     * curl support - by Emanuel Ulses
     * write url, then scan url - by Elmar Hanlhofer
*************************************************************/
    $file = "sitemap.xml";        // output file
    $url = "http://www.plop.at";    // url to scan
    // ignore urls starting with
    $skip[0] = "http://www.plop.at/print";
    $skip[1] = "http://www.plop.at/slide";
    
    $extension = ".html";        // scan files with extension
    $freq = "daily";            // scan frequency
    $priority = "0.5";            // site priority
    
function Path ($p)
{
    $a = explode ("/", $p);
    $len = strlen ($a[count ($a) - 1]);
    return (substr ($p, 0, strlen ($p) - $len));
}
function GetUrl($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

function Scan($url)
{
    global $scanned, $pf, $extension, $skip, $freq, $priority;
    
    echo "scan url $url\n";
    array_push ($scanned, $url);
    $html = GetUrl ($url);
    $a1 = explode ("<a", $html);
    foreach ($a1 as $key => $val)
    {
    $parts = explode (">", $val);
    $a = $parts[0];
    
    $aparts = explode ("href=", $a);
    $hrefparts = explode (" ", $aparts[1]);
    $hrefparts2 = explode ("#", $hrefparts[0]);
    $href = str_replace ("\"", "", $hrefparts2[0]);
    
    if ((substr ($href, 0, 7) != "http://") &&
       (substr ($href, 0, 8) != "https://") &&
       (substr ($href, 0, 6) != "ftp://"))
    {
        if ($href[0] == '/')
        $href = "$scanned[0]$href";
        else
        $href = Path ($url) . $href;
    }
    
    if (substr ($href, 0, strlen ($scanned[0])) == $scanned[0])
    {
        $ignore = false;
        if (isset ($skip))
        foreach ($skip as $k => $v)
            if (substr ($href, 0, strlen ($v)) == $v)
            $ignore = true;
        
        if ((!$ignore) &&
        (!in_array ($href, $scanned)) &&
        (strpos ($href, $extension) > 0)        
        )
        {
        fwrite ($pf, "<url>\n  <loc>$href</loc>\n" .
                 "  <changefreq>$freq</changefreq>\n" .
                 "  <priority>$priority</priority>\n</url>\n");
        echo $href. "\n";
        Scan ($href);
        }
    }
    }
}
                        

    $pf = fopen ($file, "w");
    if (!$pf)
    {
    echo "cannot create $file\n";
    return;
    }
    fwrite ($pf,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<urlset
      xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"
      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\">
<!-- created with Plop PHP XML Sitemap Generator 0.2 www.plop.at -->
<url>
  <loc>$url/</loc>
  <changefreq>daily</changefreq>
</url>
");
    $scanned = array();
    Scan ($url);
    
    fwrite ($pf, "</urlset>\n");
    fclose ($pf);
?>

 

 

Kommentare  
rassloff 2016-07-25 17:59
darf ich den code verwenden und erweitern ?
Antworten | Antworten mit Zitat | Zitieren
Jan 2016-07-25 18:12
Die Code-Beispiele sind zur freien Verwendung. Lediglich die beschreibenden Texte und Artikel dürfen nicht ohne Zustimmung verbreitet werden.
Antworten | Antworten mit Zitat | Zitieren
HosonoDesign 2015-02-28 16:10
Richtige cooler Script! :D
Antworten | Antworten mit Zitat | Zitieren
Stefan 2014-04-08 12:32
Hallo, was macht mann wenn mann html und htm als Dateiendung hat ?

Viele Grüße
Antworten | Antworten mit Zitat | Zitieren
einUser 2013-06-01 18:18
Hallo, wollte euch nur sagen, dass die Funktion ereg() veraltet ist und ihr euren Code für preg_match() anpassen solltet.
LG
Antworten | Antworten mit Zitat | Zitieren
Jan Pionzewski 2013-06-05 19:34
Hallo,

vielen Dank für den Hinweis. Ich werde das Ganze demnächst prüfen und dann hier entsprechend Aktualisieren. :-)
Antworten | Antworten mit Zitat | Zitieren
Kommentar schreiben