13.11.2015 15:47

Rudolf Horbas

Ein Sitemap-Generator für Googles Search Console

Eine Aufgabe zur Suchmaschinenoptimierung (SEO) ist die Erstellung und Einreichung einer Sitemap bei Googles Search Console. Bei sich ständig ändernden Websites mit zum Teil hunderten von Einzelseiten kann diese Aufgabe keinesfalls von Hand vorgenommen werden.

Für ein modernes CMS ist es kein Problem, eine solche Sitemap automatisch zu generieren.
Wir haben eine Vorlage für webEdition erstellt, die alle als durchsuchbar markierten Seiten einer Website ausliest und GZ-komprimiert ausgibt.

(Die Zeilen sind zum Teil unschön lang, da wir, um keinen Whitespace zu erzeugen. Zeilenumbrüche entfernen mussten.)


<we:ifEditmode>
    <aside>
        <pre>
        Diese Datei liest alle durchsuchbaren webEdition-Seiten des angegebenen
        Verzeichnisses aus und gibt sie in der Voransicht als Linkliste aus,
        damit man ggf. unerwünschte Seiten in webEdition öffnen und parken kann.
        
        In der Live-Ansicht erstellt sie eine Liste der URLs mit der angegebenen
        Domain und zippt die Liste ins von Google erwartete GZ-Format.
        </pre><hr />
    </aside>
    Sitemap in Verzeichnis:
    <we:href name="folder" type="int" file="false" directory="true" /><br />
    Zu verwendende Domain (falls nicht <?=$_SERVER['HTTP_HOST']?>):<br />
    <we:input name="domain" type="text" size="50" placeholder="www.example.com"/>
</we:ifEditmode><we:ifNotEditmode><we:input name="domain" type="text" to="global" nameto="domain"/><we:href name="folder" to="global" nameto="folder" /><?php
    if( '' != $GLOBALS['domain'] ) {
        $domain = $GLOBALS['domain'];
    } else {
        $domain = $_SERVER['HTTP_HOST'];
    }
    $folder_id = path_to_id($GLOBALS[folder]);
    $sitemap = '';
    ?><we:ifNotWebEdition><we:listview type="document" name="sitemap" order="we_filename" searchable="true" workspaceID="$folder_id" contenttypes="text/webedition"><we:repeat><we:field name="we_path" hyperlink="false" to="global" nameto="url"/><?php
$sitemap .= "http://{$domain}{$GLOBALS[url]}\r";
?></we:repeat></we:listview><?php
$file_name = 'sitemap.txt';
header('content-type: application/x-gzip');
header('Content-Disposition: attachment; filename="'.$file_name.'.gz"');
$gzdata = gzencode($sitemap, 9);
echo $gzdata;
exit();
?>
    <we:else />
        <h1>Links in der Sitemap:</h1>
        <we:listview type="document" name="sitemap" order="we_filename" searchable="true" workspaceID="$folder_id" contenttypes="text/webedition">
            <we:repeat>
                <we:field name="we_path" hyperlink="true"/><br />
            </we:repeat>
        </we:listview>
    </we:ifNotWebEdition>
</we:ifNotEditmode>

Mit dieser Vorlage erstellt man eine dynamische webEdition-Seite und meldet sie bei der Search Console, und schon kann sich Google eine stets aktuelle Liste abholen.

Die Ergebnisse in der <we:listview/> sind nach Dateinamen sortiert (order="we_filename"). Das entspricht nicht unbedingt dem Aufbau der Website, aber Google kümmert sich ohnehin nicht um die Reihenfolge. Wer die Ergebnisse nach Änderungsdatum absteigend sortiert ausgeben will, ändert die Liste so: 
<we:listview(...) order="we_moddate" desc="true">