Googlesitemap on-the-fly i Umbraco

Hvis du har en konto hos Google (kan anbefales hvis du er webmaster), så kan du fortælle google hvordan Google kan få et overblik over alle sider på dit site. Dette gøres under Sitemaps -> Add Sitemap. Jeg vil ikke komme for meget ind på hvrodan dette fungerer, men bare kort nævne at Google understøtter to slags sitemaps og den ene er en XML-version. Det er den version jeg vil illustrere hvordan man kan lave i denne artikel.

Sitemap'et er kun tiltænkt google og er ikke ment som noget en slutbruger skal se. Hvis du ønsker at slutbrugerne skal have adgang til et sitemap, kan du evt. tage udgangspunkt i den standard-XSLT, som findes i Umbraco.

Fordelen ved dette sitemap er, at det altid er up to date, fordi det er baseret på det publiserede indhold. Du skal altså ikke tænke på dit sitemap længere, når du først har fået det til at spille første gang.

Der skal bruges følgende ingredienser til denne ret:

  1. en XSLT som genererer links for alt (offentlig) indhold på sitet
  2. en makro som muliggør inddragelse af XSLT i en template
  3. en template som indeholder header og root-node (med namespace-definition)
  4. en dokumenttype som kan danne grundlag for den sidste ingrediens
  5. en side i content-sektionen som sitemapet kan findes på

XSLT'en kan oprettes med udgangspunkt i den standardskabelon som Umbraco selv kommer med. Jeg har så valgt at rokere lidt rundt på tingene (fordi jeg ikke ved nok om hvordan man kan styre namespace-erklæringer i det genererede XML). Min XSLT ser derfor således ud:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xsl:Stylesheet [ <!ENTITY nbsp "&#x00A0;"> ]>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:umbraco.library="urn:umbraco.library"
    exclude-result-prefixes="msxml umbraco.library">
  <xsl:output method="xml" omit-xml-declaration="yes"/>
  <xsl:param name="currentPage"/>

  <!-- update this variable on how deep your site map should be -->
  <xsl:variable name="maxLevelForSitemap" select="10"/>

  <xsl:template match="/">
    <xsl:call-template name="drawNodes"> 
      <xsl:with-param
           name="parent" 
           select="$currentPage/ancestor-or-self::node [@level=1]"
      /> 
    </xsl:call-template>
  </xsl:template>

  <xsl:template name="drawNodes">
    <xsl:param name="parent"/>
    <xsl:if test="umbraco.library:IsProtected($parent/@id, $parent/@path) = 0
             or (umbraco.library:IsProtected($parent/@id, $parent/@path) = 1
             amd umbraco.library:IsLoggedOn() = 1)">
      <xsl:for-each
           select="$parent/node [string(./data [@alias='umbracoNaviHide']) != '1'
               and @level &lt;= $maxLevelForSitemap]">
  <url>
    <loc><xsl:value-of select="umbraco.library:NiceUrl(@id)"/></loc>
    <lastmod><xsl:value-of select="substring-before(@updateDate,'T')"/></lastmod>
  </url>
        <xsl:if
             test="count(./node [string(./data [@alias='umbracoNaviHide']) != '1' 
                 and @level &lt;= $maxLevelForSitemap]) &gt; 0">  
          <xsl:call-template name="drawNodes">   
            <xsl:with-param name="parent" select="."/>   
          </xsl:call-template> 
        </xsl:if>
      </xsl:for-each>
    </xsl:if>
  </xsl:template>
</xsl:stylesheet>

Makroen kan blot genereres sammen med XSLT-filen når denne oprettes.

Templaten til sitemap'et skal ikke arve fra nogen master men bare være en enkeltstående master i sig selv. Min template ser således ud:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <?UMBRACO_MACRO macroAlias="Sitemap" />
</urlset>

Dokumenttypen behøver egentlig ikke indeholde nogle felter, da sitemap'et bliver genereret direkte ind i templaten. Jeg har faktisk ikke prøvet at oprette en dokumenttype uden felter, men ellers kan en anden simpel dokumenttype benyttes - felterne har ingen indflydelse på sitemap'et, da det som sagt genereres i selve templaten.

Til sidst oprettes en side i content-sektionen, så sitemap'et kan fanges via en url. Denne side skal naturligvis være baseret på en dokumenttype som tillader sitemap-templaten. 

Nu er du klar til at fortælle google hvor dit sitemap findes...

 
Sidst opdateret: 24-08-2010 22:57:53
Tilmeld link | Tilføj Link | Tilføj Link | @-begynder
Erklæring om beskyttelse af personlige oplysninger

nope.dk - Danmarks Website Chart