Seiten und Seitenbaum
Aufbau und URLs
Die Startseite ist die Wurzel des Baums und hat die URL /. Jede andere Seite hängt unter einer Elternseite; ihre URL setzt sich aus den Slugs zusammen: Seite webdesign unter leistungen → /leistungen/webdesign.
- Slugs bestehen aus
a-z,0-9,.,_,-und beginnen mit Buchstabe oder Ziffer. Unter derselben Elternseite muss ein Slug eindeutig sein. - Reservierte Slugs direkt unter der Startseite:
cms-admin,api,media,_assets,sitemap.xml,healthz,favicon.ico,robots.txt.
Mehrere Websites
Eine Installation kann mehrere Websites betreiben – etwa die Firmenseite und einen Shop oder Seiten für verschiedene Marken. Jede Root-Seite im Seitenbaum ist eine eigene Website mit eigenem Seitenbaum, Hauptmenü (nav()), 404-Seite, Sitemap und Seiten-Cache.
- Anlegen: Im Seitenbaum + Website → Name und Domains (eine pro Zeile, z. B.
shop.firma.deundwww.shop.firma.de). - Website-Icon (Favicon): Im Editor der Startseite unter Einstellungen → Website → Website-Icon ein Bild aus der Dateiverwaltung wählen – am besten ein SVG oder ein quadratisches PNG ab 180 × 180 px (dann auch als Symbol auf dem iPhone-Homescreen). Alle Seiten der Website bekommen den passenden
<link rel="icon">, und/favicon.icoliefert das Icon aus. Setzt eine Seite im Head-Feld selbst ein Icon, hat dieses Vorrang. Im Template steht die URL als{{ site.favicon }}bereit. - Domains einer bestehenden Website änderst du im Editor ihrer Startseite unter Einstellungen → Website. Eine Domain kann nur zu einer Website gehören. Schema, Port und Pfad werden beim Speichern entfernt (
https://Shop.de:8443/x→shop.de). - Standard-Website: Aufrufe über Domains, die keiner Website zugeordnet sind – auch
localhostoder die IP-Adresse des Servers –, zeigen die Standard-Website. Sie steht im Seitenbaum oben und trägt das Abzeichen Standard. - Gemeinsam genutzt werden Snippets, Komponenten, CSS/JS-Dateien, Dateien, Collections und REST-Quellen. Eine Header-Komponente kann also auf mehreren Websites laufen; mit
{{ site.title }}oder{% if site.id == 1 %}kann sie sich je Website unterscheiden. - Ansehen ohne echte Domain: Der Pfad-Link oben im Editor hängt
?_site=<ID>an. Eingeloggte Admins sehen dann diese Website – auch beim Weiterklicken, bis eine andere gewählt wird. Für Besucher hat der Parameter keine Wirkung, und eine passende Domain hat immer Vorrang. - Lokal mit eigener Domain testen: Trag zusätzlich eine Domain unter
.localhostein, z. B.shop.localhost. Browser leiten alles unter.localhostohne DNS und ohne Hosts-Datei auf den eigenen Rechner –http://shop.localhost:8080/zeigt dann diese Website, auch ohne Anmeldung, also so, wie Besucher sie sehen. Den Port gibst du nur in der Adresse an, nicht bei den Domains. Werkzeuge wie curl lösen.localhostnicht immer selbst auf; dort hilftcurl -H "Host: shop.localhost" http://127.0.0.1:8080/. - Website löschen: Im Editor ihrer Startseite unter Einstellungen. Alle Seiten der Website werden gelöscht; zur Sicherheit musst du den Namen eintippen. Auch die letzte Website lässt sich löschen – danach liefert jede Adresse die 404-Seite, bis du wieder eine anlegst.
Damit eine Domain tatsächlich bei IllusionCMS ankommt, muss sie per DNS auf den Server zeigen und im Reverse Proxy eingetragen sein (siehe Betrieb).
Mehrsprachige Websites
Jede Sprache ist ein eigener Seitenbaum: ein Unterbaum derselben Website (/en/…) oder eine eigene Website mit eigener Domain (firma.de und firma.com). Du sagst IllusionCMS, welche Sprache ein Baum hat und welche Seiten zusammengehören – hreflang, Sitemap und <html lang> erledigt es dann selbst.
Sprache setzen: Im Editor unter Einstellungen → Sprache – ein Code nach BCP 47 wie de, en, fr, de-at oder pt-br (aus der Liste wählen oder frei eintippen). Die Sprache vererbt sich auf alle Unterseiten ohne eigene: Setze sie einmal an der Website (Startseite) und einmal an der Startseite jedes Sprach-Unterbaums, z. B. /en. Leer heißt „erbt von oben“; der Hinweis neben dem Feld zeigt, welche Sprache gerade gilt. Hat keine Seite darüber eine Sprache, gilt de. Im Seitenbaum tragen Seiten mit eigener Sprache ein kleines Kürzel.
Die Seite bekommt automatisch <html lang="…">, im Template steht die Sprache als {{ page.lang }} bereit. Ein lang= in den Attributen für <html> hat weiter Vorrang; beim Update auf diese Version wurde es einmalig ins Feld Sprache übernommen.
Sprachfassungen verknüpfen: Im Abschnitt Sprachfassungen der Einstellungen → Verknüpfen … → Seiten aller Websites nach Titel, Pfad oder Sprache durchsuchen und die passende anklicken. Ausgegraut sind Seiten in derselben Sprache, schon verknüpfte und Seiten, deren Sprache in der Gruppe schon vorkommt – je Sprache eine Seite. Ist die gewählte Seite schon mit anderen Fassungen verknüpft, fragt IllusionCMS, ob sie verschoben werden soll. Die Liste zeigt Sprache, Titel, Pfad (bei anderen Websites mit deren Namen) und einen Link zum Öffnen. Lösen nimmt eine Fassung heraus, Gruppe verlassen die aktuelle Seite; bleibt nur eine Seite übrig, ist die Gruppe aufgelöst. Wer eine Seite löscht, löst sie damit auch. Verknüpft wird mit der gespeicherten Sprache – nach einer Änderung am Feld Sprache also erst speichern.
Automatisch, sobald mindestens zwei veröffentlichte Fassungen verknüpft sind:
- hreflang: Im
<head>steht je Fassung (auch für die Seite selbst) ein<link rel="alternate" hreflang="en" href="https://firma.com/contact">. Die Adressen sind absolut – über die erste Domain der jeweiligen Website, ohne Domain über die aufgerufene Adresse. Stehen schon eigenerel="alternate" hreflang-Tags im Head-Feld der Seite, gibt IllusionCMS keine eigenen aus. Dazu kommthreflang="x-default": Liegen alle Fassungen in derselben Website (Sprach-Unterbäume wie/und/de), zeigt es auf die Fassung in der Sprache dieser Website, sonst auf die in der Sprache der Standard-Website (falls es eine gibt). - Sitemap: Jede URL mit Fassungen bekommt
xhtml:link-Einträge mithreflang, auch im statischen Export.
Entwürfe zählen dabei nicht mit.
Sprachumschalter: translations() liefert die veröffentlichten Fassungen der aktuellen Seite, sortiert nach Sprachcode, je mit lang, title, url und current (die Seite selbst). Ohne Verknüpfung enthält die Liste nur die aktuelle Seite – der Umschalter kann also im Layout stehen und bleibt dort leer, wo es nichts umzuschalten gibt ({% if translations()|length > 1 %}). language_name(code) gibt den Namen der Sprache in ihr selbst aus:
<nav class="sprachen">
{% for v in translations() %}
{% if v.current %}<span aria-current="true">{{ language_name(v.lang) }}</span>
{% else %}<a href="{{ v.url }}" hreflang="{{ v.lang }}" lang="{{ v.lang }}">{{ language_name(v.lang) }}</a>{% endif %}
{% endfor %}
</nav>
Fassungen auf einer anderen Website verlinken auf deren Domain.
Menü je Sprache: nav() liefert immer die Unterseiten der Website-Startseite – auf /en/… stünde dort das deutsche Menü. lang_root() gibt die Startseite des Sprachbaums der aktuellen Seite zurück: die Seite selbst oder die nächste darüber mit eigener Sprache, gibt es keine, die Website-Startseite (auch auf Catch-All-Detailseiten und in der Vorschau). Damit baut ein gemeinsames Layout für jede Sprache das passende Menü samt Startseiten-Link:
{% with start=lang_root() %}
<a class="logo" href="{{ start.path }}">{{ site.title }}</a>
<nav>{% for p in children(start.id) %}<a href="{{ p.path }}">{{ p.title }}</a>{% endfor %}</nav>
{% endwith %}
Liegt der englische Baum unter der deutschen Startseite (/en), setzt du an /en In Menüs ausblenden – sonst steht „English“ im deutschen Menü. Erreichbar bleibt die Seite über den Sprachumschalter. lang_root(12) liefert den Sprachbaum von Seite 12.
Collections pro Sprache: Eine Collection hat eine Sprache (Schema → Sprache der Einträge). Für mehrere Sprachen legst du getrennte Collections an, z. B. blog (Sprache de) und blog-en (en), und verknüpfst die Einträge im Eintragsdialog unter Sprachfassungen – genauso wie Seiten, gesucht wird über die Einträge der anderen Collections mit Sprache. Neue Einträge erst speichern. Haben die Collections eine Detailseite (Schema), bekommen auch die Detailseiten hreflang und Sitemap-Einträge, und translations(post) liefert die Fassungen eines Eintrags:
{% with post=item("blog", "slug", route.slug) %}
{% for v in translations(post) %}<a href="{{ v.url }}" hreflang="{{ v.lang }}">{{ language_name(v.lang) }}</a> {% endfor %}
{% endwith %}
Grenzen:
- IllusionCMS merkt sich nur, was zusammengehört. Es übersetzt nichts und erkennt nicht, ob eine Fassung veraltet ist.
- Seiten lassen sich nur mit Seiten verknüpfen, Einträge nur mit Einträgen. Einträge aus Collections ohne Sprache lassen sich nicht verknüpfen.
nav()zeigt immer das Hauptmenü der Website (Unterseiten der Startseite); für Menüs je Sprache nimmst duchildren(lang_root().id)(siehe oben).- Die Sprache der Admin-Oberfläche (unten im Menü) hat mit der Sprache der Inhalte nichts zu tun.
Seiten verschieben
Im Seitenbaum per Drag & Drop:
- auf den oberen Rand einer Seite ziehen → davor einsortieren,
- auf den unteren Rand → danach,
- auf die Mitte → als Unterseite.
Die Startseite lässt sich nicht verschieben, eine Seite nicht in ihren eigenen Unterbaum. Beim Verschieben ändert sich die URL der Seite und aller Unterseiten – Links im HTML anderer Seiten werden nicht automatisch angepasst. Für Menüs nutzt du deshalb besser nav()/children() (siehe Templates), die die aktuellen Pfade liefern.
Der Seitenbaum lässt sich über den Pfeil im Kopf einklappen, wenn du mehr Platz für den Editor brauchst.
Veröffentlichen und Entwürfe
- Veröffentlicht – die Seite ist öffentlich erreichbar.
- Entwurf – die Seite liefert öffentlich 404. Ein Entwurf blendet nur sich selbst aus; veröffentlichte Unterseiten bleiben erreichbar. So kannst du „Ordner“ wie
/bloganlegen, die selbst keine Seite sind, deren Artikel aber schon. - Eingeloggt siehst du Entwürfe trotzdem: Hänge
?preview=1an die URL (z. B./neue-seite?preview=1) oder nutze den Pfad-Link oben im Editor. - Vorschau-Links für andere (z. B. Kunden): im Tab Einstellungen unter Vorschau-Links → Gültigkeit (1, 7 oder 30 Tage) → Link erstellen (wird gleich kopiert). Der Link zeigt den gespeicherten Stand der Seite und ihrer Unterseiten ohne Anmeldung – auch als Entwurf, und bei Catch-All-Seiten auch Collection-Einträge, die noch Entwurf sind (
/blog/neuer-artikel?ic_preview=…; im Template istpreviewdann wahr). Andere Seiten öffnet er nicht. Suchmaschinen bekommennoindex, die Statistik zählt nichts, nichts wird gecacht. Abgelaufene oder widerrufene Links (Papierkorb) zeigen „Vorschau abgelaufen“. Im Remote-Modus entsteht der Link auf dem Server und zeigt auf dessen Adresse.
Seiteneinstellungen
Im Editor-Tab Einstellungen:
| Einstellung | Bedeutung |
|---|---|
| Titel | Name der Seite im Seitenbaum, in Menüs (nav()) und Standard für <title>. |
| Slug | URL-Teil. Bei der Startseite nicht änderbar. |
| Sprache | Sprache der Inhalte als Code (de, en, fr, de-at …), vererbt sich auf Unterseiten ohne eigene. Leer = erbt von oben, der Hinweis zeigt die geerbte. Siehe Mehrsprachige Websites. |
| Sprachfassungen | Dieselbe Seite in anderen Sprachen verknüpfen – für hreflang, Sitemap und Sprachumschalter. |
| SEO-Titel | Optionaler <title>, als Template ausgewertet – z. B. mit dem Titel des aktuellen Blogartikels. Leer = Titel. |
| Meta-Beschreibung | <meta name="description">, Template-Syntax möglich. |
| Vorschaubild | Bild für Link-Vorschauen in Messengern und sozialen Netzwerken (og:image), am besten 1200 × 630 px. Gilt für alle Unterseiten ohne eigenes – ein Bild an der Website (Root-Seite) ist also die Vorgabe für alle Seiten. |
Attribute für <html> / <body> |
Werden unverändert ausgegeben, z. B. class="dark". Ohne lang= setzt IllusionCMS lang aus dem Feld Sprache; ein eigenes lang= hier hat Vorrang. Webflow-Importe brauchen hier data-wf-page/data-wf-site. |
| Veröffentlicht | siehe oben |
| In Menüs ausblenden | Seite fehlt in nav() und children(), bleibt aber veröffentlicht und erreichbar – für Impressum, Datenschutz, Danke-Seiten, Landingpages. Mit nav(true) bzw. children(id, true) holst du sie trotzdem, z. B. fürs Footer-Menü. Im Seitenbaum steht ohne Menü. Nicht bei Startseiten. |
| Nicht in der Sitemap auflisten | Seite erscheint nicht in /sitemap.xml (Danke-Seiten, Landingpages). |
| noindex | Suchmaschinen sollen die Seite nicht in den Index aufnehmen. Setzt <meta name="robots" content="noindex"> und nimmt die Seite aus der Sitemap. |
| nofollow | Suchmaschinen sollen den Links auf der Seite nicht folgen (<meta name="robots" content="nofollow">). Beide zusammen ergeben noindex, nofollow. |
| Cache deaktivieren | Seite wird bei jedem Aufruf neu gerendert (siehe Cache). |
| Catch-All | Seite beantwortet auch nicht existierende Unterpfade – Grundlage für dynamische Seiten. |
Link-Vorschauen (Open Graph): Jede Seite bekommt automatisch og:title (SEO-Titel), og:description (Meta-Beschreibung), og:url, og:site_name (Name der Website), og:type und twitter:card – mit Vorschaubild zusätzlich og:image samt Größe und Alternativtext (aus der Dateiverwaltung), dann als große Karte. Die Adressen sind absolut: über die erste Domain der Website, ohne Domain über die aufgerufene Adresse. Steht ein Tag schon im Head-Feld oder im importierten HTML (Webflow bringt eigene mit), wird es nicht doppelt ausgegeben – so setzt du z. B. für Blogartikel einer Catch-All-Seite ein eigenes Bild:
{% if route.slug %}<meta property="og:image" content="https://www.firma.de{{ file(item("blog", "slug", route.slug).bild).url }}">{% endif %}
Als MHTML archivieren (unten im Tab) lädt den gespeicherten Stand der Seite als eine einzige .mhtml-Datei herunter – mit CSS, Bildern, Schriften und Favicon, auch von fremden Servern (z. B. Google Fonts). Chrome und Edge öffnen sie per Doppelklick, auch offline; Firefox und Safari können MHTML nicht öffnen. Gedacht als Schnappschuss zum Archivieren:
- Keine Skripte: Browser führen in MHTML kein JavaScript aus, Skripte werden deshalb gar nicht erst eingepackt. Slider, Menüs oder per JavaScript nachgeladene Inhalte erscheinen im Zustand ohne Skript.
- Kein srcset: Bilder kommen in der Größe aus
src,srcsetund<picture><source>werden entfernt. - Dateien über 25 MB (z. B. Videos) und nicht erreichbare Dateien bleiben draußen; die Seite verweist dann weiter auf die Originaladresse.
- Ungespeicherte Änderungen im Editor sind nicht enthalten – vorher speichern.
Eigene 404-Seite
Jede Website kann eine eigene Fehlerseite haben. Sie wird für alle nicht gefundenen Pfade angezeigt – mit Status 404 – und bekommt den angefragten Pfad als route.path.
- Beliebige Seite wählen: Im Editor der Startseite unter Einstellungen → Website → 404-Seite. Zur Auswahl stehen alle Seiten dieser Website; die gewählte Seite bleibt unter ihrer eigenen URL erreichbar, fehlt aber in der Sitemap. Entwürfe werden ignoriert.
- Automatisch (Standard): eine veröffentlichte Seite mit dem Slug
404direkt unter der Startseite. - Gibt es keine von beiden – oder noch gar keine Website –, zeigt das CMS eine schlichte Standardseite.
{{ not_found() }} in einem Template (z. B. auf Detailseiten) liefert dieselbe 404-Seite.
Weiterleitungen
Unter Weiterleitungen (Hauptmenü) leitest du Adressen, die es nicht mehr gibt, auf bestehende um – z. B. alte URLs nach dem Umzug von Webflow oder Einträge einer Catch-All-Seite, deren URL-Teil du geändert hast (/blog/123 → /blog/mein-artikel).
- Anlegen: Von (alte Adresse – Pfad oder einfach die alte URL einfügen), Nach (Pfad oder externe URL; Vorschläge aus dem Seitenbaum), Art 301 dauerhaft (Standard, für Suchmaschinen) oder 302 vorübergehend.
- Weiterleitungen greifen nur bei toten Adressen – gibt es unter dem Pfad eine Seite, wird sie angezeigt. Groß-/Kleinschreibung und ein Schrägstrich am Ende spielen keine Rolle; Query-Parameter (
?utm_source=…) werden ans Ziel übernommen. - Automatisch: Benennst du eine veröffentlichte Seite um oder verschiebst sie, legt IllusionCMS Weiterleitungen von den alten Adressen der Seite und all ihrer Unterseiten an (Markierung auto). Bestehende Weiterleitungen auf die alte Adresse werden mit umgestellt – es entstehen keine Ketten.
- Ziel fehlt markiert Weiterleitungen, deren Ziel keine Seite mehr ist.
- 404-Protokoll: Darunter siehst du, welche toten Adressen aufgerufen werden – wie oft, wann zuletzt und woher (z. B. ein alter Link auf Facebook). Weiterleiten übernimmt die Adresse ins Formular. Ignorieren löscht nicht, sondern blendet die Adresse nur aus: Sie wandert samt Zähler in den Reiter Ignoriert und taucht auch bei weiteren Aufrufen nicht wieder als offen auf. Viele Einträge wie
/wp-login.phpstammen von Bots und können ignoriert werden. Hast du dich vertan, holst du die Adresse im Reiter Ignoriert mit Zurückholen zurück; Alle ignorieren bzw. Alle zurückholen wirken auf die ganze Liste. Ignorierte Adressen erscheinen nicht im CSV-Export. - In Excel bearbeiten (CSV): CSV exportieren (oben rechts) lädt die offenen Adressen aus dem 404-Protokoll – häufigste zuerst, Spalte Nach leer – und darunter alle Weiterleitungen als CSV herunter. Trag in Nach die Ziele ein (Pfad wie
/neuoder eine URL), ändere bei Bedarf Ziele oder Status (301/302) bestehender Weiterleitungen und lade die Datei mit CSV importieren wieder hoch. Abgeglichen wird über Von: Zeilen mit Ziel legen Weiterleitungen an oder ändern sie, Zeilen ohne Ziel bleiben offen. Mit Weiterleitungen löschen, die in der Datei fehlen oder kein Ziel haben räumst du über die Datei auch auf. Die Vorschau zeigt jede Änderung und alle Fehler (z. B. Schleifen, doppelte Pfade, Pfade bestehender Seiten) – bei Fehlern wird nichts übernommen. Excel: als CSV UTF-8 speichern; Spalten Typ, Treffer, Zuletzt und Herkunft dienen nur der Übersicht. Zellen, die mit=,+,-oder@beginnen, bekommen im Export (auch bei Collections) ein führendes', damit Excel sie nicht als Formel ausführt; beim Import wird es wieder entfernt. - Im statischen Export stehen die Weiterleitungen in der
.htaccess, in Bundles werden sie mit übertragen.
robots.txt
Jede Website hat automatisch eine /robots.txt, die Suchmaschinen alles erlaubt und auf die Sitemap verweist:
User-agent: *
Allow: /
Sitemap: https://www.firma.de/sitemap.xml
Eigene Regeln trägst du im Editor der Startseite unter Einstellungen → Website → robots.txt ein, z. B. Disallow: /intern/. Fehlt dort eine Sitemap:-Zeile, wird sie ergänzt. Einzelne Seiten nimmst du besser mit noindex aus dem Index – eine per robots.txt gesperrte Seite kann trotzdem in den Suchergebnissen auftauchen, nur ohne Inhalt.
Sitemap
Unter /sitemap.xml erzeugt IllusionCMS automatisch eine Sitemap aller veröffentlichten Seiten – ohne die 404-Seite und ohne Seiten mit Nicht in der Sitemap auflisten oder noindex. Unterseiten von Entwürfen sind enthalten (sie sind ja erreichbar). Detailseiten hinter Catch-All-Seiten (einzelne Blogartikel) kommen automatisch dazu, wenn die Seite ihren Eintrag wie im Catch-All-Beispiel per item("blog", "slug", route.slug) liest: dann steht jeder veröffentlichte Eintrag mit nicht leerem slug als /blog/<slug> in der Sitemap, mit dem Änderungsdatum des Eintrags.
Besucherstatistik
Unter Statistik siehst du, wie viele Besucher kamen – bei mehreren Websites für alle zusammen (Standard; in der Seitenliste steht dann die Website vor dem Pfad) oder für eine ausgewählte –, welche Seiten sie aufgerufen haben, woher sie kamen (Domain des verweisenden Links oder utm_source), aus welchen Ländern (Weltkarte mit Liste) und mit welchem Browser, Betriebssystem und Gerät – für heute, 7 oder 30 Tage, 12 Monate oder einen eigenen Zeitraum (Von – bis, höchstens drei Jahre), jeweils mit Vergleich zum gleich langen Zeitraum davor. Bei mehr als drei Monaten zeigt das Diagramm Monate statt Tage.
So wird gezählt: auf dem Server, bei jedem erfolgreich ausgelieferten Seitenaufruf (auch aus dem Cache) – ohne Cookies, ohne JavaScript, ohne Dienst von außen. Nicht gezählt werden Bots und Crawler, vorab geladene Seiten (Prefetch), die Vorschau und deine eigenen Aufrufe, solange du im Admin angemeldet bist.
Eindeutige Besucher erkennt ein Hash aus IP-Adresse, Browser-Kennung und einem zufälligen Wert, der jeden Tag neu erzeugt wird; der alte wird gelöscht. IP-Adressen werden nie gespeichert, und am nächsten Tag lässt sich der Hash niemandem mehr zuordnen. Dadurch zählt jemand, der an drei Tagen kommt, als drei Tagesbesucher – die Besucherzahl eines Zeitraums ist die Summe der Tage. Herkunft, Land, Browser, Betriebssystem und Gerät zählen je Besucher und Tag, nicht je Aufruf.
Downloads: Die Karte Downloads zeigt, welche Datei wie oft heruntergeladen wurde – gezählt werden Abrufe unter /media/… von Dateien wie PDF, ZIP oder Office-Dokumenten, auch über Direktlinks (z. B. aus einem Newsletter; die Website ergibt sich aus der Domain). Bilder, Schriften und CSS/JS zählen nie, ebenso Dateien, die eine Seite einbettet (z. B. ein PDF im <iframe>). Bei Videos und PDFs, die der Browser in Teilen lädt, zählt nur der erste Abruf. Ausgenommen sind wie bei Seiten Bots, Prefetch und deine eigenen Abrufe als angemeldeter Admin; Besucher zählt eindeutige Besucher je Datei und Tag. Downloads zählen nicht als Seitenaufrufe. Ein abgebrochener Download zählt trotzdem – genauer geht es ohne Einzelaufrufe nicht. Im statischen Export gibt es keine Zählung.
Länder: Beim Zählen schlägt der Server die IP in den freien Vergabelisten der fünf Internet-Registries nach (RIPE NCC, ARIN, APNIC, LACNIC, AFRINIC) – lokal, ohne Dienst von außen; gespeichert wird nur der Ländercode. Es ist das Registrierungsland des Adressblocks, meist das Land des Internetanbieters – bei VPNs, Firmennetzen und manchen Mobilfunkanbietern weicht es vom Standort ab. Städte gibt es bewusst nicht. Die Listen (zusammen rund 45 MB) lädt IllusionCMS gleich nach dem ersten Start und danach wöchentlich im Nachtlauf neu; den Stand siehst du unter Einstellungen → System → Länderdaten. Dort kannst du sofort aktualisieren, die Länder ganz abschalten oder – für Server ohne Internetzugang – die Dateien delegated-…-extended-latest von Hand hochladen. Fehlt der Abgleich einmal, bleiben die bisherigen Daten. Besuche vor dem ersten Abgleich haben kein Land.
CSV exportieren lädt alle Tageswerte des gewählten Zeitraums (und der gewählten Website bzw. aller) herunter – je Tag eine Zeile für die Website insgesamt, jede Seite, jedes Merkmal (Herkunft, Browser, Betriebssystem, Gerät, Land) und jede heruntergeladene Datei (Art Download), mit Aufrufen bzw. Downloads und Besuchern. Die Datei öffnet sich direkt in Excel und eignet sich für Pivot-Tabellen; Merkmale zählen nur Besucher.
Gespeichert werden nur Tageswerte; sie bleiben, bis du sie unten auf der Seite zurücksetzt. Die Statistik ist nicht Teil von Bundles. Ob dieses Verfahren für deine Website ohne Einwilligung zulässig ist, hängt vom Einzelfall ab – es ist auf Datensparsamkeit ausgelegt, eine Rechtsberatung ersetzt es nicht; erwähne es in der Datenschutzerklärung.