robots.txt and sitemap.xml in Odoo

Verstehen wie sie in Odoo funktionieren

Robert Rübner

robots.txt in odoo

Die robots.txt kann in odoo einfach über die URL http://www.your-domain.de/robots.txt aufgerufen werden. Standardmäßig ist folgender Inhalt enthalten.

User-agent: *
Sitemap: http://www.your-domain.de/sitemap.xml

Da der Inhalt über ein Template geladen wird, kann man die robots.txt seinen Wünschen entsprechend anpassen, indem man das Template wie jedes andere erweitert. Das entsprechende Template hat die ID website.robots und ist im website Modul enthalten.

Ab odoo v9 ist es auch möglich, unterschiedliche robots.txt pro Webseite zu nutzen, da Templates zu einzelnen Webseiten gelinkt werden können.

Es gibt bereits Module, website_no_crawler und website_norobots, die das Crawling deaktivieren. Es spielt dabei keine Rolle, welches von beiden benutzt wird, da beide dasselbe machen.

sitemap.xml in odoo

Die sitemap.xml kann in odoo einfach über die URL http://www.your-domain.de/sitemap.xml aufgerufen werden. Standardmäßig enthält die Seite folgende Struktur.

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://www.your-domain.de/page/site-1</loc>
    </url><url>
        <loc>http://www.your-domain.de/page/site-2</loc>
        <lastmod>2015-11-13</lastmod>
    </url><url>
    ...
    </url>
</urlset>

Auch der Inhalt der sitemap.xml wird über ein entsprechendes Template geladen. Daher kann man durch Templateerweiterungen die XML Struktur anpassen. Die entsprechenden Template IDs sind website.sitemap_xml und website.sitemap_locs. Beide Templates sind auch im website Modul enthalten. Da diese Templates dynamische Daten enthalten, muss man den entsprechenden Controller überschreiben, wenn man neue oder angepasste Daten in den Templates benutzen möchte.

Auch hier ist es ab odoo v9 möglich, unterschiedliche sitemap.xml pro Webseite zu nutzen, da Templates zu einzelnen Webseiten gelinkt werden können.

Im Hintergrund werden odoo Anhänge für die sitemap.xml angelegt. Das bedeutet, dass man sich den Inhalt der sitemap.xml auch im odoo Backend unter Einstellungen -> Technisch -> Datenbankstruktur -> Dateianhänge ansehen kann. Es gibt keinen Scheduler, welcher die Anhänge automatisch generiert. Die Anhänge werden beim ersten Aufruf von http://www.your-domain.de/sitemap.xml erstellt. Wenn man die URL danach wieder aufruft, werden die Anhänge nicht neu erstellt und auch nicht aktualisiert. Erst nach einem gewissen Zeitraum werden die Anhänge neu generiert. Standardmäßig geschieht das, wenn die bestehenede sitemap.xml beim URL Aufruf älter als 12h ist.

Die URL Einträge in der sitemap.xml werden durch die Funktion enumerate_pages() im website Modul erstellt. Standardmäßig sind das alle Templates, die das Attribut page="True" haben. Wenn man andere URL Einträge haben möchte, muss man diese Funktion überschreiben.

Es gibt noch ein weiteres Template mit der ID website.sitemap_index_xml im website Modul. Dieses Template wird benutzt, wenn die Anzahl der Einträge der sitemap.xml einen bestimmten Wert übersteigen. Standardmäßig werden 45000 Einträge in einer sitemap.xml eingetragen. Wenn dieser Wert überstiegen wird, wird die sitemap.xml in mehrere Dateien aufgeteilt. Das Namensschema ist dann sitemap-1.xml, sitemap-2.xml, sitemap-3.xml usw. Die Struktur dieser Seite sieht wie folg aus.

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <sitemap>
        <loc>http://www.your-domain.de/sitemap-1.xml</loc>
        <loc>http://www.your-domain.de/sitemap-2.xml</loc>
        <loc>http://www.your-domain.de/sitemap-3.xml</loc>
        ...
    </sitemap>
</sitemapindex>

Auch wenn nur eine sitemap.xml angelegt werden muss, odoo generiert automatisch eine sitemap-1.xml. Dadurch wird jedoch nicht die <sitemapindex> Struktur geladen, sondern die <urlset> Struktur.

About Robert Rübner

The python and odoo ninja/ We've heard some people call him Yoda/ Got a smartphone some months ago.