Die Google-Sitemap ist eine XML-Datei, die über den Änderungsstatus und die relative inhaltliche Bedeutung (Priorität) Auskunft gibt.

Für den statischen Export oder auch die direkte Erzeugung einer performance-sparenden statischen Google-Sitemap empfiehlt sich die explitzite, d.h. redaktionell definierte Erzeugung der XML-Datei. Die Methode sitemapxml erzeugt ein entsprechendes Zope-Fileobjekt im common-Folder. Durch einfache Code-Anpassung kann das Fileobjekt natürlich auch an anderen Stellen im Objektbaum platziert werden. Um PAGE-Objekten einen Prioritätswert zuordnen zu können, ist die Einführung eines zusätzlichen Meta-Attributes attr_bot_priority erforderlich:

sitemapxmlMetacmd

Die folgende DTML-Methode kann als ZMS-Aktion zur Generierung eines Sitemap-Datenstroms verwendet werden. Über die Aktion-List kann der Redakteur die Sitemap-Erzeugung: starten; der XML-Strom wird als statisches Zope-Fileobjekt im common-Folder abgelegt.

Die DTML-Methode generiert den Google-konformen Datenstrom als REQUEST-Variable und gibt diese dann als Fileobjekt aus:

<dtml-call f_standard_html_request>
<!-- Generating sitemap.xml as a REQUEST variable -->
<dtml-call "REQUEST.set('sitemapxml','')">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'<?xml version='+QUOT+'1.0'+QUOT+' 
  encoding='+QUOT+'UTF-8'+QUOT+'?>')">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n<urlset')">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n  
  xmlns='+QUOT+'http://www.google.com/schemas/sitemap/0.84'+QUOT)">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n  xmlns:xsi='+QUOT+
  'http://www.w3.org/2001/XMLSchema-instance'+QUOT)">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n  
  xsi:schemaLocation='+QUOT+'http://www.google.com/schemas/sitemap/0.84')">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n                     
  http://www.google.com/schemas/sitemap/0.84/sitemap.xsd'+QUOT+'>')">

<dtml-in "getLanguages(REQUEST)">
<dtml-call "REQUEST.set('lang',_['sequence-item'])">

<dtml-with "content">
<dtml-call "REQUEST.set('obs',[this()])">
<dtml-call "obs.extend(filteredTreeNodes(REQUEST,PAGES,max_len=None))">
<dtml-in obs>
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n   <url>')">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n     <loc>http://'+getConfProperty('ASP.ip_or_domain')+_.string.split(_.string.split(getHref2IndexHtml(REQUEST),'content')[1],'?preview')[0]+'</loc>')">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n     <lastmod>'+getLangFmtDate(getObjProperty('change_dt',REQUEST),'eng','%Y-%m-%d')+'</lastmod>')">
<dtml-if "getObjProperty('attr_bot_priority',REQUEST)">
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n     <priority>'+getObjProperty('attr_bot_priority',REQUEST)+'</priority>')">  
<dtml-else> 
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n     <priority>0.5</priority>')">
</dtml-if>
<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n   </url>')">
</dtml-in>
</dtml-with>

</dtml-in>

<dtml-call "REQUEST.set('sitemapxml',sitemapxml+'\n</urlset>')">

<!-- writing index into a file  -->
<dtml-with "common">
 <dtml-try>
  <dtml-call "manage_addFile('sitemap.xml',title='SITEMAP',content_type='text/xml')">
 <dtml-except>
 </dtml-try>
  <dtml-with "_['sitemap.xml']">
   <dtml-call "manage_edit(title='SITEMAP', content_type='text/xml',precondition='', filedata=sitemapxml)">
  </dtml-with>
</dtml-with>

<dtml-call expr="REQUEST.set('message','<a href='+QUOT+'../common/sitemap.xml'+QUOT+' target='+QUOT+'_blank'+QUOT+'>../common/sitemap.xml</a> successfully generated')">
<dtml-return message>