> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# TopRank-HTML-Seiten

> Die Platzhalter der beiden TopRank-Templates: aus Kategorien und Produkten statische HTML-Seiten für Suchmaschinen erzeugen, mit Kategoriedaten, Produktschleife, Deep-Links und Blätterlinks.

TopRank erzeugt aus dem Sortiment eines Shops statische HTML-Seiten, je eine pro Kategorie, dazu eine Übersichtsseite pro Subshop. Diese Seiten liegen als echte Dateien auf dem Server und sind damit auch für Suchmaschinen erreichbar, die mit einem Shopsystem nichts anfangen können. Von dort führen Deep-Links in den Shop.

Wie diese Seiten aussehen, bestimmen zwei Templates. Beim Erzeugen ersetzt das Shopsystem darin Platzhalter durch die Daten der jeweiligen Kategorie. Diese Seite beschreibt alle Platzhalter und sagt, in welchem der beiden Templates und an welcher Stelle darin sie stehen dürfen.

Wegweiser: [Templates für TopRank anpassen](https://dokumentation.websale.de/v8s/seo/seo-optimierung-mit-toprank.md)

> [!WARNING]
>
> Die Platzhalter dieser Seite sind **keine Shoptemplate-Tags**. Sie werden nicht vom Shopsystem beim Seitenaufruf ausgewertet, sondern einmalig beim Erzeugen der TopRank-Seiten ersetzt. Umgekehrt funktioniert kein einziges `PR-`, `CAT-` oder `WS-`Tag in diesen Templates.

## Die beiden Templates

| Template | Erzeugt |
| - | - |
| `template-category.htm` | je eine Seite pro Kategorie |
| `template-subshop.htm` | die Übersichtsseite eines Subshops |

Beide Dateien liegen im TopRank-Verzeichnis des Shops. Das Shopsystem sucht zuerst nach einer subshopeigenen Fassung mit angehängter Subshop-Kennung, beispielsweise `template-category-deutsch.htm`. Nur wenn es die nicht findet, nimmt es die allgemeine Datei. So lassen sich einzelne Subshops gesondert gestalten, ohne die anderen anzufassen.

> [!WARNING]
>
> Fehlt eines der beiden Templates, bricht die Erzeugung ab. Legen Sie immer beide an, auch wenn Sie die Übersichtsseite kaum gestalten wollen.

Platzhalter werden wie im Shoptemplate geschrieben, also `~Name~` für einen Wert, `{Name}` und `{/Name}` für einen Bereich und `{@Name}` und `{/@Name}` für eine Schleife.

> [!WARNING]
>
> Nicht ersetzte Platzhalter werden am Ende aus der fertigen Seite entfernt. Ein Tippfehler im Namen fällt deshalb nicht auf, die Stelle bleibt einfach leer. Prüfen Sie nach einer Änderung am Template immer eine erzeugte Seite.

## Angaben zum Shop

Diese Platzhalter stehen in beiden Templates frei zur Verfügung.

| Platzhalter | Liefert |
| - | - |
| `Shopname` | den in der TopRank-Konfiguration hinterlegten Shopnamen |
| `ShopID` | die Shop-Kennung |
| `SubshopID` | die Subshop-Kennung |
| `ShopKeyword` | das in der TopRank-Konfiguration hinterlegte Schlüsselwort für den Shop |
| `HomeUrl` | den Link auf die Startseite des Shops |
| `StartUrl` | den Link auf die TopRank-Übersichtsseite dieses Subshops |
| `URL-Template` | die Basisadresse des Shops |
| `Year` | das aktuelle Jahr |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<p>&copy; ~Year~ ~Shopname~ | <a href="~HomeUrl~">zum Shop</a></p>
```

`StartUrl` ist der nützlichere der beiden, denn damit bauen Sie auf jeder Kategorieseite den Weg zurück zur TopRank-Übersicht.

> [!WARNING]
>
> Verwechseln Sie `HomeUrl` und `StartUrl` nicht. `HomeUrl` führt in den Shop, `StartUrl` auf die statische Übersichtsseite. Beide haben ihren Platz, meinen aber Verschiedenes.

`ShopID` und `SubshopID` eignen sich für Tracking-Skripte, die auch auf den statischen Seiten laufen sollen.

## Die Kategorieseite

Alles in diesem Abschnitt gilt ausschließlich in `template-category.htm`.

### Die angezeigte Kategorie

| Platzhalter | Liefert |
| - | - |
| `Catname` | den Namen der Kategorie |
| `Catname-1` | den Namen der übergeordneten Kategorie |
| `CatPage` | den Dateinamen dieser Seite |
| `CatPage-1` | den Dateinamen der übergeordneten Kategorie |
| `CatDescr` | die Beschreibung der Kategorie |
| `CatDescr()` | dieselbe Beschreibung, auf die angegebene Länge gekürzt |
| `CatShortDescr` | die auf eine feste Länge gekürzte Beschreibung |
| `Keywords` | eine Liste von Schlüsselwörtern |
| `Cat-FreeField1` bis `Cat-FreeField5` | die freien TopRank-Felder der Kategorie |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<h1>~Catname~</h1>
{Catname-1}<p><a href="~CatPage-1~">zurück zu ~Catname-1~</a></p>{/Catname-1}
<meta name="keywords" content="~Keywords~">
<meta name="description" content="~CatDescr(160)~">
```

> [!WARNING]
>
> Die Beschreibung heißt `CatDescr`, nicht `Cat-Descr`. Ein Template mit `~Cat-Descr~` erzeugt eine leere Stelle.

`CatDescr()` kürzt auf die in Klammern angegebene Zeichenzahl und entfernt dabei alle HTML-Auszeichnungen. Das ist Absicht, denn beim Abschneiden mitten im Text bliebe sonst ein geöffnetes Element ohne sein schließendes Gegenstück zurück. Für den `description`-Eintrag im Seitenkopf ist das die richtige Fassung.

`CatPage-1` ist die fehlende Hälfte zu `Catname-1`, denn ohne den Dateinamen lässt sich aus dem Namen der übergeordneten Kategorie kein Link bauen.

`Keywords` wird vom Shopsystem erzeugt und enthält den Namen der Kategorie sowie die Namen von bis zu drei übergeordneten Kategorien. Sind es weniger, füllt das Shopsystem mit festen Begriffen auf. Das Wort aus `ShopKeyword` steht immer darin.

Die fünf freien Felder je Kategorie werden im TopRank-Manager gepflegt und fassen bis zu 4000 Zeichen. Sie lassen sich als Wert und als Bereich verwenden, der Bereich greift, wenn das Feld gefüllt ist.

### Die Produkte der Kategorie

`{Products}` ist der Bereich, der nur erscheint, wenn die Kategorie Produkte enthält. `{@Products}` ist die Schleife darüber.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{Products}
   <h2>Artikel in dieser Kategorie</h2>
   {@Products}
      <div class="artikel">
         <img src="~Thumbnail~" alt="~PrdName~">
         {RobotProdIndex}
            <h3><a href="~Shopurlprd~">~PrdName~</a></h3>
         {/RobotProdIndex}
         {!RobotProdIndex}
            <h3>~PrdName~</h3>
         {/!RobotProdIndex}
         <p>~PrdShortDescr~</p>
      </div>
   {/@Products}
{/Products}

{!Products}
   <p>In dieser Kategorie sind derzeit keine Artikel hinterlegt.</p>
{/!Products}
```

| Platzhalter | Liefert |
| - | - |
| `PrdName` | den Namen des Produkts |
| `PrdShortDescr` | die Kurzbeschreibung |
| `PrdDescr` | die vollständige Beschreibung |
| `Thumbnail` | die Adresse des Vorschaubildes |
| `Image` | die Adresse des normalgroßen Produktbildes |
| `Shopurlprd` | den Deep-Link auf das Produkt im Shop |
| `{RobotProdIndex}` | Bereich: die Produkte dieser Kategorie dürfen indiziert werden |

> [!WARNING]
>
> Alle Produktplatzhalter stehen ausschließlich **innerhalb** der Schleife `{@Products}`. Das gilt auch für `{RobotProdIndex}`. Außerhalb bleibt es wirkungslos.

Es liefert die vollständige Beschreibung des Produkts einschließlich HTML-Auszeichnungen.

`PrdShortDescr` greift auf die gepflegte Kurzbeschreibung zurück. Fehlt sie, kürzt das Shopsystem stattdessen die vollständige Beschreibung auf etwa 150 Zeichen. Die Stelle bleibt also nur dann leer, wenn beide Felder leer sind.

> [!WARNING]
>
> Ist im TopRank-Manager eingestellt, dass die Produkte einer Kategorie nicht indiziert werden sollen, greift `{RobotProdIndex}` nicht **und** `Shopurlprd` bleibt leer. Klammern Sie den Deep-Link deshalb immer, sonst entsteht ein Verweis ins Leere.

Nicht jedes Produkt der Kategorie landet auf der Seite. Produkte, die zum Zeitpunkt der Erzeugung nicht sichtbar sind, und Produkte der Autobasket-Kategorie werden übersprungen.

### Blättern bei vielen Produkten

Die Zahl der Produkte je Seite ist in der TopRank-Konfiguration begrenzt. Hat eine Kategorie mehr, verteilt das Shopsystem sie auf mehrere Dateien.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{Splitlinks}
   <nav class="blaettern">~Splitlinks~</nav>
{/Splitlinks}
```

> [!WARNING]
>
> `Splitlinks` liefert nicht die einzelnen Links, sondern einen fertigen HTML-Block mit Vorwärts- und Rückwärtspfeilen und den Seitenzahlen. Die Auszeichnung darin ist vom Shopsystem vorgegeben und enthält keine CSS-Klassen. Gestalten lässt sich das nur über ein umgebendes Element.

Passt die Kategorie auf eine Seite, bleibt `Splitlinks` leer. Setzen Sie die Blätternavigation deshalb in eine Klammerung, sonst steht auf kurzen Seiten ein leeres Element.

## Die Unterkategorien

Dieser Abschnitt gilt in **beiden** Templates. Auf der Übersichtsseite laufen Sie damit über die obersten Kategorien, auf einer Kategorieseite über deren Unterkategorien.

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{Categories}
   <h2>Bereiche</h2>
   {@Categories}
      <div class="kategorie">
         <h3><a href="~SCatPage~">~SCatName~</a></h3>
         <p>~SCatDescr(200)~</p>
         {RobotIndex}
            <p><a href="~SShopurlcat~">im Shop ansehen</a></p>
         {/RobotIndex}
      </div>
   {/@Categories}
{/Categories}
```

| Platzhalter | Liefert |
| - | - |
| `{Categories}` | Bereich: es gibt Unterkategorien |
| `{@Categories}` | die Schleife über die Unterkategorien |
| `SCatPage` | den Dateinamen der TopRank-Seite dieser Unterkategorie |
| `SCatName` | den für Suchmaschinen aufbereiteten Namen |
| `SCatDescr` | die Beschreibung |
| `SCatDescr()` | dieselbe Beschreibung, auf die angegebene Länge gekürzt |
| `SShopurlcat` | den Deep-Link auf die Kategorie im Shop |
| `{RobotIndex}` | Bereich: diese Unterkategorie darf indiziert werden |
| `SCat-FreeField1` bis `SCat-FreeField5` | die freien TopRank-Felder dieser Unterkategorie |

> [!WARNING]
>
> `{RobotIndex}` bezieht sich auf die **Unterkategorie im Durchlauf**, nicht auf die gerade angezeigte Kategorie, und steht deshalb innerhalb von `{@Categories}`. Das ist nicht der Fall, zur eigenen Kategorie gibt es keine entsprechende Klammerung.
>
> Soll eine Unterkategorie nicht indiziert werden, bleibt zusätzlich `SShopurlcat` leer. Der Deep-Link gehört deshalb in jedem Fall in `{RobotIndex}` hinein. Der Link auf die TopRank-Seite über `SCatPage` ist davon nicht betroffen und funktioniert weiter.

`SCatName` ist nicht einfach der Kategoriename, sondern der im TopRank-Manager hinterlegte Suchbegriff, sofern dort einer gepflegt ist. Nur sonst greift das Shopsystem auf den Kategorienamen zurück.

`SCatDescr()` kürzt und entfernt dabei die HTML-Auszeichnungen, genau wie `CatDescr()` auf der Kategorieebene.

## Die Übersichtsseite

Zwei Platzhalter gibt es nur in `template-subshop.htm`.

| Platzhalter | Liefert |
| - | - |
| `CreateDate` | Datum und Uhrzeit der letzten Erzeugung |
| `ShopDescr` | die in der TopRank-Konfiguration hinterlegte Shopbeschreibung |

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<p>~ShopDescr~</p>
<p class="stand">Stand: ~CreateDate~</p>
```

Es ist das Gegenstück zu `CatDescr` auf der Kategorieseite und gehört üblicherweise in den `description`-Eintrag im Seitenkopf der Übersicht.

`CreateDate` enthält Datum und Uhrzeit im Format `TT.MM.JJJJ HH:MM:SS`. Die Angabe stammt aus dem Augenblick der Erzeugung, nicht aus dem Aufruf der Seite. Auf einer statischen Seite ist das genau der sinnvolle Wert.

## Die Platzhalter im Überblick

| Platzhalter | Kategorie-Template | Subshop-Template | Steht in |
| - | - | - | - |
| `Shopname` | ja | ja | frei |
| `ShopID` | ja | ja | frei |
| `SubshopID` | ja | ja | frei |
| `ShopKeyword` | ja | ja | frei |
| `HomeUrl` | ja | ja | frei |
| `StartUrl` | ja | ja | frei |
| `URL-Template` | ja | ja | frei |
| `Year` | ja | ja | frei |
| `Catname` | ja | – | frei |
| `Catname-1` | ja | – | frei |
| `CatPage` | ja | – | frei |
| `CatPage-1` | ja | – | frei |
| `CatDescr` | ja | – | frei |
| `CatDescr()` | ja | – | frei |
| `CatShortDescr` | ja | – | frei |
| `Keywords` | ja | – | frei |
| `Cat-FreeField1` bis `5` | ja | – | frei |
| `{Products}` | ja | – | frei |
| `{@Products}` | ja | – | frei |
| `PrdName` | ja | – | `{@Products}` |
| `PrdDescr` | ja | – | `{@Products}` |
| `PrdShortDescr` | ja | – | `{@Products}` |
| `Thumbnail` | ja | – | `{@Products}` |
| `Image` | ja | – | `{@Products}` |
| `Shopurlprd` | ja | – | `{@Products}` |
| `{RobotProdIndex}` | ja | – | `{@Products}` |
| `Splitlinks` | ja | – | frei |
| `{Categories}` | ja | ja | frei |
| `{@Categories}` | ja | ja | frei |
| `SCatPage` | ja | ja | `{@Categories}` |
| `SCatName` | ja | ja | `{@Categories}` |
| `SCatDescr` | ja | ja | `{@Categories}` |
| `SCatDescr()` | ja | ja | `{@Categories}` |
| `SShopurlcat` | ja | ja | `{@Categories}` |
| `{RobotIndex}` | ja | ja | `{@Categories}` |
| `SCat-FreeField1` bis `5` | ja | ja | `{@Categories}` |
| `CreateDate` | – | ja | frei |
| `ShopDescr` | – | ja | frei |

Die Spalte "Steht in" nennt die Schleife, innerhalb derer der Platzhalter stehen muss. Alles mit "frei" darf an beliebiger Stelle im jeweiligen Template stehen.

## Verwandte Themen

* Wegweiser: Templates für TopRank anpassen
* Wegweiser: [SEO-Optimierung mit TopRank](https://dokumentation.websale.de/v8s/seo/seo-optimierung-mit-toprank.md)
* Wegweiser: [SEO-URLs](https://dokumentation.websale.de/v8s/seo/seo-urls-und-link-optimierung.md)
* Referenz: [SEO- (URL-Einstellungen TopRank)](https://dokumentation.websale.de/v8s/referenz/tags/seo-url-einstellungen-toprank.md)


## Related topics

- [SEO-Optimierung mit TopRank](https://dokumentation.websale.de/v8s/seo/seo-optimierung-mit-toprank.md)
- [Grundlagen und Technik](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/grundlagen-und-technik.md)
- [SEO- (URL-Einstellungen TopRank)](https://dokumentation.websale.de/v8s/referenz/tags/seo-url-einstellungen-toprank.md)
- [SEO-URLs und Link-Optimierung](https://dokumentation.websale.de/v8s/seo/seo-urls-und-link-optimierung.md)
- [Allgemeine Online-Dienste](https://dokumentation.websale.de/v8s/online-servicebereich/allgemeine-online-dienste.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.