Eine Google-Sitemap mit FirstSpirit™ erstellen

bohm
I'm new here
7 12 3,560

Hinweis:

Es existiert eine aktualisierte Version dieses Artikels. Bitte besuchen Sie die Seite

Creating Sitemaps for Search Engines in unserem Inside FirstSpirit blog.

In vielen Projekten besteht die Notwendigkeit, eine Google-Sitemap vorzuhalten.

Nachstehend ein Beispiel dafür, wie man mit der Navigationsfunktion eine solche Sitemap erstellen kann. Hierbei werden auch die Einzelseiten einer Contentprojektion berücksichtigt:

<CMS_HEADER>

<CMS_FUNCTION name="Navigation" resultname="googleSitemap">

  <CMS_PARAM name="expansionVisibility" value="all"/>
  <CMS_PARAM name="wholePathSelected" value="0"/>
  <CMS_PARAM name="siteMap" value="1" />

  <CMS_ARRAY_PARAM name="unselectedHTML">
    <CMS_ARRAY_ELEMENT index="0..10"><![CDATA[
   <url>
    <loc>http://www.domain.de/$CMS_REF(#nav.ref,abs:2)$</loc>
   </url>   
    ]]></CMS_ARRAY_ELEMENT>
  </CMS_ARRAY_PARAM>
 
  <CMS_ARRAY_PARAM name="pageRefRendering">
   <CMS_ARRAY_ELEMENT index="0..10"><![CDATA[
   $CMS_IF(#nav.ref.getMultiPageParams(#global.language,#global.templateSet).getPageCount() > 1)$
       $CMS_IF(!#nav.ref.getMultiPageParams(#global.language,#global.templateSet).getData().isEmpty)$
           $CMS_FOR(#csPages,#nav.ref.getMultiPageParams(#global.language,#global.templateSet).getData())$
               <url>
                <loc>http://www.domain.de/$CMS_REF(#nav.ref,abs:2,contentId:#csPages.getId())$</loc>
               </url>
           $CMS_END_FOR$
       $CMS_ELSE$
           <url>
               <loc>http://www.domain.de/$CMS_REF(#nav.ref,abs:2)$</loc>
            </url>
       $CMS_END_IF$
   $CMS_ELSE$   
       <url>
        <loc>http://www.domain.de/$CMS_REF(#nav.ref,abs:2)$</loc>
       </url>
   $CMS_END_IF$
  
   ]]></CMS_ARRAY_ELEMENT>
  </CMS_ARRAY_PARAM>

</CMS_FUNCTION>

</CMS_HEADER><?xml version="1.0" encoding="UTF-8"?>
  <urlset xmlns="http://www.google.com/schemas/sitemap/0.84">
    $CMS_VALUE(googleSitemap)$
  </urlset>

Die Spezifikation für eine solche Sitemap findet man hier.

12 Comments
Peter_Jodeleit
Crownpeak employee
Crownpeak employee

Ist der Teil "unselectedHTML" nicht überflüssig? Die Inhaltsseiten werden doch schon durch "pageRefRendering" berücksichtigt, so hat man dann doch doppelte URLs im Dokument.

Und der "pageRefRendering" Teil lässt sich auch noch weiter vereinfachen:

   <CMS_FUNCTION name="Navigation" resultname="googleSitemap">
  
     <CMS_PARAM name="expansionVisibility" value="all"/>
     <CMS_PARAM name="wholePathSelected" value="0"/>
     <CMS_PARAM name="siteMap" value="1" />
  
     <CMS_ARRAY_PARAM name="pageRefRendering">
      <CMS_ARRAY_ELEMENT index="0..100"><![CDATA[
              $CMS_SET(multiPageParams, #nav.ref.getMultiPageParams(#global.language, #global.templateSet))$
              $CMS_FOR(i, [0 .. multiPageParams.pageCount - 1])$
                   <url>
                      <loc>http://www.domain.de/$CMS_REF(#nav.ref, abs:2, index:i)$</loc>
                   </url>
              $CMS_END_FOR$
      ]]></CMS_ARRAY_ELEMENT>
     </CMS_ARRAY_PARAM>
  
   </CMS_FUNCTION>
sglock
I'm new here

Innerhalb des <url>-Elements ist es sinnvoll, zusätzlich das letzte Änderungsdatum der Seite auszugeben. Die kürzlich geänderten Seiten werden von Google dann - hoffentlich! - bevorzugt gecrawlt. Bei HTML-Content geht das über die zu ergänzende Zeile

<lastmod>$CMS_VALUE(#nav.ref.page.changeDate().format("yyyy-MM-dd"))$</lastmod>

Bei dynamischen Seiten kann das letzte Änderungsdatum entweder aus der Datenbank geholt werden oder (bei permanent wechselndem Content) auf #global.now.format("yyyy-MM-dd") gesetzt werden.

matthias_przyby
Returning Observer

Hallo,

wir benutzen das Schema http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd, in dem auch die Tags <changefreq> und <priority> innerhalb des <url> verwendet werden können.

Kann man über FS-Mittel diese Werte auch ermitteln und generieren lassen? Bisher wüßte ich nicht, wie ich an diese Daten in FS rankomme.

Danke für eine Idee oder gar konkrete Antwort.

Viele Grüße,

Matthias

feddersen
Community Manager
Community Manager

Die Daten können Sie z.B. über Metadaten pflegen und dann entsprechend in der Navigationsfunktion mit ausgeben. Per se sind die Informationen nicht in FirstSpirit vorhanden, da sie vom konkreten Projekt abhängen.

matthias_przyby
Returning Observer

Vielen Dank für die Antwort!

Viele Grüße...

mcheungspeedo
I'm new here

Hi all,

I have translated this into English Smiley Happy and I too would like to know how you add the tags

<changefreq> <priority> works within the code above.

These tags help further with SEO performance.

Any ideas?

I look forward to the response.

Thanks.

Michael.

Peter_Jodeleit
Crownpeak employee
Crownpeak employee
I have translated this into English Smiley Happy

Can't see it Smiley Wink

I too would like to know how you add the tags

<changefreq> <priority> works within the code above.

These tags help further with SEO performance.

I suggest you take these informations from the mata-data tab if available. If not available use a meaningful default value.

mcheungspeedo
I'm new here

Thanks pjodeleit. :smileygrin:

Where is the "mata-data" tab?

essmann
I'm new here
MarcusDau
Occasional Collector

Mittlerweile ist das Schema

http://www.google.com/schemas/sitemap/0.84

deprecated und man sollte lieber auf dieses Schema hier aufsetzen:

http://www.sitemaps.org/schemas/sitemap/0.9

So hat es Matthias ja auch geschrieben, dass er es schon verwendet. Grüße übrigens 😉

TimoMeister
Returning Responder

Das Template ist echt nützlich. Danke dafür! Content-Projektionen werden ja ebenfalls aufgelistet. Wir haben z.B. News-Beiträge die on- bzw. offline  gesetzt werden können und werden dann mit $CMS_SET(#global.stopGenerate,true)$ nicht generiert. Kann man Content-Projektionen, die nicht generiert werden hier in der Sitemap abfangen?

dleinich
Occasional Collector

Please see the article Creating Sitemaps for Search Engines on the Inside FirstSpirit blog for an updated version and more sophisticaed approach.

Version history
Last update:
‎07-09-2010 05:20 AM
Updated by: