Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 13. November 2020 14:04

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

[CMS V1] Erstellen einer dynamischen Sitemap für Inhalt und Module

Da die primäre Webseite nicht mehr verfügbar ist, hier aus (für mich) gegebenem Anlass eine freie Übersetzung von

https://web.archive.org/web/20160101141 … robots-txt

Um den Suchmaschinen wie Google zu helfen, deine Webseite zu indizieren, kannst du sogenannte Sitemaps und eine robots.txt Datei verwenden.

Um eine statische Sitemap zu generieren, ist ein Modul wie SiteMapMadeSimple eine großartige Lösung. Der Nachteil dieses Modules ist jedoch, dass die sitemap Datei nach JEDER Inhaltsänderung neu erstellt wird. Und bei sehr großen Webseiten kann dies eine Weile dauern...

Ich hatte das Problem selbst mit einer meiner Webseiten. Ein paar hundert Seiten, ein paar tausend Produkte, ein paar Dutzend News Artikel und ein paar Dutzend Einträge im Company Directory Modul. Das Arbeiten in der Administration war nicht mehr lustig, denn die war seeeehr langsam.

Im CMS/ms Forum habe ich dazu ein paar Posts von SjG, Kermit und Arnoud gefunden, bei denen es um die Erstellung dynamischer Sitemaps ging. Mir gefiel die Idee und ich habe es selbst ausprobiert. Das Ergebnis waren SEO-freundliche Sitemaps und eine Administration, die wieder in normaler Geschwindigkeit funktionierte.

Wie funktioniert es genau?

1. Erstelle einen benutzerdefinierten Tag mit dem Namen "content_type"

[== PHP ==]
$content_type = get_parameter_value($params, 'type');

if ($content_type != '') {
  if (version_compare(CMS_VERSION, '1.99-alpha0', '<')) {
    cmsms()->variables['content-type'] = $content_type; // 1.11 series
  } else {
    cmsms()->set_content_type($content_type); // 2.0 series
  }
}

2. Erstelle ein neues Seiten-(HTML)-Template mit dem Namen "blank", was einzig folgendes beinhaltet:

[== Smarty ==]
{content label='SEO Smarty Code' wysiwyg=false}

Für jede Sitemap, die du erstellen willst, benötigst du eine (normale) Inhaltsseite, denen das Template "blank" zugeordnet wird. Um die Seitenauflistung in der Administration übersichtlich zu halten, habe ich die folgenden Seiten erstellt und einer Dummy Abschnittsüberschrift untergeordnet, also in folgender Struktur

1. Abschnittsüberschrift: SEO
1.1 Inhaltsseite: Sitemap Index
1.2 Inhaltsseite: Sitemap Seiten
1.3 Inhaltsseite: Sitemap News
etc.

In der Registerkarte "Optionen" müssen die Felder "Diese Seite darf in den Suchergebnissen erscheinen:", "Seite im Menü anzeigen:" und "Zwischenspeichern" DEAKTIVIERT sein.


Sitemap für Inhaltsseiten

Erstelle im MenüManager ein neues Template mit dem Namen "sitemap_seiten" und folgendem Inhalt:

[== Smarty ==]
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{if $count > 0}
  {foreach $nodelist as $node}
    {if $node->type == 'content'}
      <url>
        <loc>{$node->url}</loc>
        <lastmod>{$node->modified|date_format:'%Y-%m-%d'}</lastmod>
        <changefreq>
          {math now=$smarty.now modified=$node->modified equation='(now-modified)/86400' assign='days'}
          {if $days < 2}hourly
          {elseif $days < 14}daily
          {elseif $days < 61}weekly
          {elseif $days < 365}monthly
          {else}yearly
          {/if}
        </changefreq>
        <priority>
          {$level=$node->hierarchy|substr_count:'.'}
          {if $node->url|substr:0:-1 == {root_url}}1
          {elseif $level == '0'}0.8
          {elseif $level == '1'}0.6
          {elseif $level == '2'}0.4
          {else}0.2
          {/if}
        </priority>
      </url>
    {/if}
  {/foreach}
{/if}
</urlset>

Füge jetzt folgendes im Inhalt der Seite "Sitemap Seiten" ein:

[== Smarty ==]
{content_type type='text/xml'}
{menu template='sitemap_seiten'}

Alle Inhaltsseiten, die im Menü der Webseite angezeigt werden, sind jetzt auch in der Sitemap enthalten, alle anderen Seiten bleiben verborgen. Falls diese Seiten auch in der Sitemap erscheinen sollen, füge dem Menü Aufruf den Parameter show_all hinzu:

[== Smarty ==]
{content_type type='text/xml'}
{menu template='sitemap_seiten' show_all=1}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap-seiten.xml

Anschließend kannst du den Quelltext der Sitemap für die Inhaltsseiten unter www.deine-website.de/sitemap-seiten.xml prüfen.


Sitemap für das CGBlog Modul (Version 1.11+)

Erstelle ein neues CGBlog Zusammenfassungs Template mit dem Namen "sitemap_blog" und diesem Inhalt:

[== Smarty ==]
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{foreach $items as $entry}
<url>
  <loc>{$entry->detail_url}</loc>
  <lastmod>{$entry->modified_date|date_format:'%Y-%m-%d'}</lastmod>
  <changefreq>
    {math now=$smarty.now modified=strtotime($entry->modified_date) equation='(now-modified)/86400' assign='days'}
    {if $days < 2}hourly
    {elseif $days < 14}daily
    {elseif $days < 61}weekly
    {elseif $days < 365}monthly
    {else}yearly
    {/if}
  </changefreq>
  <priority>0.6</priority>
</url>
{/foreach}
</urlset>

Füge jetzt auf der Inhaltsseite "Sitemap CGBlog" den folgenden Inhalt ein:

[== Smarty ==]
{content_type type='text/xml'}
{CGBlog summarytemplate='sitemap_blog' number=1000}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap-cgblog.xml

Anschließend kannst du den Quelltext der Sitemap für das CGBlog Modul unter www.deine-website.de/sitemap-cgblog.xml prüfen.


Sitemap für das Products Modul

Erstelle ein neues Products Zusammenfassung Template mit dem Namen "sitemap_products" und dem Inhalt:

[== Smarty ==]
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{foreach $items as $entry}
<url>
  <loc>{$entry->detail_url}</loc>
  <lastmod>{$entry->modified_date|date_format:'%Y-%m-%d'}</lastmod>
</url>
{/foreach}
</urlset>

Füge jetzt auf der Inhaltsseite "Sitemap Products" den folgenden Inhalt ein:

[== Smarty ==]
{content_type type='text/xml'}
{Products summarytemplate='sitemap_products'}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap-products.xml

Anschließend kannst du den Quelltext der Sitemap für das Products Modul unter www.deine-website.de/sitemap-products.xml prüfen.

Bei einer größeren Anzahl von Produkten (>500) solltest du aus Performance Gründen die Product Sitemaps in mehrere Teile aufsplitten. Dafür kannst du das bereits vorhandene Template "sitemap_products" nutzen.

Erstelle dafür eine neue Inhaltsseite "Sitemap Products 1" mit folgendem Inhalt:

[== Smarty ==]
{content_type type='text/xml'}

{cge_module_hint module='Products' page=1}
{Products summarytemplate='sitemap_products' sortby='id' pagelimit=500}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap-products-1.xml

Anschließend kannst du den Quelltext der Sitemap für das Products Modul unter www.deine-website.de/sitemap-products-1.xml prüfen.

Das setzt du dann mit den Seiten 2, 3, 4 usw. fort (je nach Bedarf).


Sitemap für das News Modul

Erstelle ein neues News Zusammenfassungs Template mit dem Namen "sitemap_news" und dem folgenden Inhalt:

[== Smarty ==]
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{foreach $items as $entry}
  <url>
    <loc>{$entry->moreurl}</loc>
    <lastmod>{$entry->modified_date|date_format:'%Y-%m-%d'}</lastmod>
    <changefreq>
      {math now=$smarty.now modified=strtotime($entry->modified_date) equation='(now-modified)/86400' assign='days'}
      {if $days < 2}hourly
      {elseif $days < 14}daily
      {elseif $days < 61}weekly
      {elseif $days < 365}monthly
      {else}yearly{/if}
    </changefreq>
    <priority>0.6</priority>
  </url>
{/foreach}
</urlset>

Füge jetzt auf der Inhaltsseite  "Sitemap News" den folgenden Inhalt ein:

[== Smarty ==]
{content_type type='text/xml'}
{News summarytemplate='sitemap_news'}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap-news.xml

Anschließend kannst du den Quelltext der Sitemap für das News Modul unter www.deine-website.de/sitemap-news.xml prüfen.


Sitemap for Company Directory module

Erstelle ein neues CompanyDirectory Zusammenfassungs Template mit dem Namen "sitemap_companydirectory" und dem folgenden Inhalt:

[== Smarty ==]
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{foreach $items as $entry}
<url>
  <loc>{$entry->detail_url}</loc>
  <lastmod>{$entry->modified_date|date_format:'%Y-%m-%d'}</lastmod>
</url>
{/foreach}
</urlset>

Füge jetzt auf der Inhaltsseite "Sitemap Company Directory" den folgenden Inhalt ein:

[== Smarty ==]
{content_type type='text/xml'}
{CompanyDirectory summarytemplate='sitemap_companydirectory'}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap-compagnies.xml

Anschließend kannst du den Quelltext der Sitemap für die CompanyDirectory Moduls unter www.deine-website.de/sitemap-compagnies.xml prüfen.


Sitemap for CGCalendar module

Erstelle ein neues CGCalendar Upcominglist Template mit dem Namen "sitemap_cgcalendar" und dem folgenden Inhalt:

[== Smarty ==]
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
{foreach from=$events key=key item=event}
<url>
  <loc>{$event.url}</loc>
</url>
{/foreach}
</urlset>

Füge jetzt auf der Inhaltsseite "Sitemap Calendar" den folgenden Inhalt ein:

[== Smarty ==]
{content_type type='text/xml'}
{CGCalendar display='upcominglist'}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap-calendar.xml

Anschließend kannst du den Quelltext der Sitemap für das CGCalendar Modul unter www.deine-website.de/sitemap-calendar.xml prüfen.


Sitemap Index Datei

Wenn du mehrere Sitemaps für deine Webseite hast, dann kannst du eine Sitemap Index Datei erstellen, sozusagen eine Sitemap für die Sitemaps...

Dies hat den Vorteil, dass du nur noch diese eine Sitemap an die Google oder Bing Webmastertools übermitteln musst!

Erstelle im MenüManager ein neues Template mit dem Namen "sitemap_index" mit dem Inhalt:

[== Smarty ==]
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  {if $count > 0}
    {foreach $nodelist as $node}
      {if $node->type == 'content'}
        <sitemap>
          <loc>{$node->url}</loc>
        </sitemap>
      {/if}
    {/foreach}
  {/if}
</sitemapindex>

Füge jetzt auf der Inhaltsseite "Sitemap Index" den folgenden Inhalt ein:

[== Smarty ==]
{content_type type='text/xml'}
{menu template='sitemap_index' childrenof='seo' show_all='1'}

Trage dann unter "Optionen" folgende Seiten-URL ein:

sitemap.xml

Anschließend kannst du den Quelltext der Sitemap unter www.deine-website.de/sitemap.xml prüfen.

Beitrag geändert von Andynium (13. November 2020 20:56)

Offline

#2 13. November 2020 14:06

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: [CMS V1] Erstellen einer dynamischen Sitemap für Inhalt und Module

Die robots.txt und humans.txt dynamisch zu erstellen halte ich persönlich für groben Unfug. So viel Dynamik benötigen nicht einmal große Webseiten big_smile .

Hab mir daher die Übersetzung dieses Teils erspart...

Offline

#3 13. November 2020 20:07

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: [CMS V1] Erstellen einer dynamischen Sitemap für Inhalt und Module

Gerade gelesen

https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap?hl=de&visit_id=637408909709370928-1185439617&rd=1 schrieb:

Google unterstützt verschiedene Sitemap-Formate, die nachstehend beschrieben werden. Google erwartet in allen Formaten das Standard-Sitemap-Protokoll. Das Attribut <priority> wird in Sitemaps momentan nicht unterstützt.

Kann also aus den Templates entfernt werden angel ...

Offline

#4 13. November 2020 21:39

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: [CMS V1] Erstellen einer dynamischen Sitemap für Inhalt und Module

Übrigens, der MenuManager liefert für die Sitemap Index Seite mit {$node->url} die Pretty URLs im voreingestellten Format.

Das Ergebnis sah bei mir dann ungefähr so aus:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
     <loc>https://xxx.info/sitemap-seiten.xml.html</loc>
  </sitemap>
  <sitemap>
     <loc>https://xxx.info/sitemap-tagebuch.xml.html</loc>
  </sitemap>
</sitemapindex>

Da ich das .html an der Stelle nicht haben wollte, hab ich das MenuManager Template für die Sitemap Index Seite quick'n dirty wie folgt angepasst:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  {if $count > 0}
    {foreach $nodelist as $node}
      {if $node->type == 'content'}
        <sitemap>
          <loc>{$node->url|substr:0:-5}</loc>
        </sitemap>
      {/if}
    {/foreach}
  {/if}
</sitemapindex>

Und schon ist alles schick  big_smile ...

Offline