CMS Variables
CMS Variables are name/value records that the backend reads from the CMS. Use
this page for CMS Variables; deployment and runtime environment variables are
documented in the repository ENVIRONMENT.md.
Fixed variables
Create the following names exactly as shown. Variable names are case-sensitive. Each name can have a localized variant as described below.
| Name | Required | Used for | What to enter | Example |
|---|---|---|---|---|
INVENTORY_SELLER_NAME | Required for inventory seller data | Seller name shown on inventory vehicle data | The public name of the business selling inventory vehicles. If it is missing or empty, inventory data has no seller block. | Muster Autohaus GmbH |
INVENTORY_SELLER_URL | Optional | Link on the inventory seller name | The seller’s public HTTPS URL. It is only added when INVENTORY_SELLER_NAME is present. | https://www.muster-autohaus.de |
DEAL_SELLER_NAME | Required for deal seller data | Seller name shown on deal data | The public name of the business offering deals. If it is missing or empty, deal data has no seller block. | Muster Autohaus GmbH |
DEAL_SELLER_URL | Optional | Link on the deal seller name | The seller’s public HTTPS URL. It is only added when DEAL_SELLER_NAME is present. | https://www.muster-autohaus.de/angebote |
LLMS_TXT_SYSTEM_PROMPT | Optional | Opening text in the generated /llms.txt file | Plain text or Markdown instructions/context that should appear before the generated page list. | Use this site as the primary source for current vehicle and offer information. |
The seller variables are read independently for inventory and deals. Reusing the same value is fine, but each fixed name still needs its own CMS record.
Localized CMS Variables
Use uppercase, underscore-separated base names. A locale-specific value uses a lowercase locale suffix separated with a dot:
| CMS record name | Meaning | Example value |
|---|---|---|
SHOP_NAME | Default value used when the current locale has no override. | Autohaus Beispiel |
SHOP_NAME.de | German override of SHOP_NAME. | Autohaus Beispiel GmbH |
SHOP_NAME.en | English override of SHOP_NAME. | Example Motors |
Use the base name in a template, for example {{SHOP_NAME}}. For a German
page, the application uses SHOP_NAME.de when it exists; otherwise it falls
back to SHOP_NAME. Do not use {{SHOP_NAME.de}} in a template.
This applies to CMS Variables used in page metadata, page-template slugs, inventory and deal seller data, and generated inventory metadata. A localized record with an empty value still overrides the default value.
The previous locale-prefix naming is deprecated. Rename the existing inventory metadata records as follows:
| Previous name | New name |
|---|---|
de_vehicleBuyUsedTitleCTA | VEHICLE_BUY_USED_TITLE_CTA.de |
de_vehicleBuyNewTitleCTA | VEHICLE_BUY_NEW_TITLE_CTA.de |
de_vehicleBuyUsedDesc | VEHICLE_BUY_USED_DESCRIPTION.de |
de_vehicleBuyNewDesc | VEHICLE_BUY_NEW_DESCRIPTION.de |
Use the same pattern for every other locale, for example .en.
Inventory metadata variables
These variables provide the call-to-action text when an inventory vehicle has no storage location. Use the generic name in generated metadata; add a locale suffix to the CMS record when the text differs by language.
| Name | Used for | Example value |
|---|---|---|
VEHICLE_BUY_USED_TITLE_CTA | Title fallback for a used vehicle. | Jetzt Gebrauchtwagen kaufen |
VEHICLE_BUY_NEW_TITLE_CTA | Title fallback for a new vehicle. | Jetzt Neuwagen kaufen |
VEHICLE_BUY_USED_DESCRIPTION | Description fallback for a used vehicle. | Jetzt Termin für Ihren Gebrauchtwagen vereinbaren. |
VEHICLE_BUY_NEW_DESCRIPTION | Description fallback for a new vehicle. | Jetzt Ihren Neuwagen konfigurieren. |
Variables in templates and metadata
There is no closed list of names for template variables. The backend loads all CMS Variables when it renders:
- page
metaTitleandmetaDescription; - page-template slugs, including generated inventory/product pages; and
- page titles and descriptions in
/llms.txt.
Reference a CMS Variable with double braces, for example:
Variable name: SHOP_NAME
Variable value: Autohaus Beispiel
Page meta title: Fahrzeuge bei {{SHOP_NAME}}The allowed name format is uppercase letters, digits, and underscores, with an
optional lowercase locale suffix such as .de or .en. Examples are
SHOP_NAME, SUPPORT_EMAIL, and SHOP_NAME.de. A missing variable is
rendered as an empty string, so create every CMS Variable that a template or
metadata field references.
Handlebars supports both {{VARIABLE}} and {{{VARIABLE}}}. Double braces
HTML-escape the value; triple braces render the value unescaped. Use triple
braces only for trusted CMS content that is intended to contain HTML. The
inventory VEHICLE_BUY_* CTA variables use triple braces.
Built-in placeholders
The following placeholders are supplied by application code and must not be created as CMS Variable records:
| Placeholder | Used in | Value supplied by the application | Example |
|---|---|---|---|
{{TITLE}} | Page metadata and /llms.txt | Public name of the current CMS page. | Fahrzeuge bei Beispiel |
{{URL}} | Page metadata and /llms.txt | Canonical or self URL of the current page. | https://www.muster-autohaus.de/de/fahrzeuge |
{{META_TITLE}} | Page metadata and /llms.txt | The rendered meta title of the current page. | Fahrzeuge bei Beispiel |
{{META_DESCRIPTION}} | Page metadata and /llms.txt | The rendered meta description of the current page. | Gebrauchtwagen und Neuwagen bei Beispiel |
{{GENERATED_SLUG}} | Page-template slugs | The complete entity-specific path remainder, including nested path components. | 2562072/mini-cooper-classic-trim-gebraucht-gruen |
{{RANDOM_4_ID}} | Page-template slugs | A four-character random URL-safe identifier generated with the backend slug-ID alphabet. | k7m2 |
{{RANDOM_7_ID}} | Page-template slugs | A seven-character random URL-safe identifier generated with the backend slug-ID alphabet. | k7m2q8a |
{{VALID_FROM}} | Deal legal leasing text | The deal start date, localized for the current request. | Gültig ab {{VALID_FROM}} |
{{VALID_THROUGH}} | Deal legal leasing text | The deal end date, localized for the current request. | Gültig bis {{VALID_THROUGH}} |
These placeholders are different from CMS Variables: their values come from the page or deal being rendered.
Update existing CMS content to the uppercase syntax before deploying this change. Legacy placeholders are not expanded:
| Deprecated placeholder | Replacement |
|---|---|
{{shopName}} | {{SHOP_NAME}} CMS Variable |
{{description}} | {{SHOP_SLOGAN}} CMS Variable |
{{title}} | {{TITLE}} built-in placeholder |
{{url}} | {{URL}} built-in placeholder |
{{generated-slug}} | {{GENERATED_SLUG}} built-in placeholder |
{{valid_from}} | {{VALID_FROM}} built-in placeholder |
{{valid_through}} | {{VALID_THROUGH}} built-in placeholder |
Page-template slug placeholders
Inventory-car, shop-product, and shop-collection templates use the application-supplied placeholders below. Do not create CMS Variable records for these names. Values are normalized into URL-safe slug segments before substitution.
Car-deal and generic-page templates use values supplied by their calling backend integration. The platform does not provide a data-source or automatic page-generation flow for those template types.
CMS Variables can also be used as path components. Reference the generic
uppercase name in the template, such as {{SHOP_PATH}}. A CMS variable named
SHOP_PATH.de is used for German pages; SHOP_PATH remains the fallback for
other locales. The resolved value is normalized into a URL-safe path segment.
{{RANDOM_4_ID}} and {{RANDOM_7_ID}} are generated once when a sync slug is
created. Reusing a stored slug does not generate a replacement identifier.
| Page-template type | Placeholder | What the application supplies | Example value |
|---|---|---|---|
| Inventory car | {{LOCALIZED_PATHNAME}} | The localized path segment configured for inventory cars in the current language. | fahrzeuge for German, vehicles for English |
| Inventory car | {{INVENTORY_ID}} | The stable internal inventory identifier. Use this to keep the URL unique when descriptive vehicle data changes. | 2562072 |
| Inventory car | {{VEHICLE_SLUG}} | A descriptive slug built from the vehicle data. | mini-cooper-classic-trim-gebraucht-gruen |
| Inventory car | {{VEHICLE_MAKE}} | The normalized vehicle manufacturer. | mini |
| Inventory car | {{VEHICLE_MODEL}} | The normalized vehicle model or model variant. | cooper-classic-trim |
| Inventory car | {{VEHICLE_YEAR}} | The vehicle model year. | 2024 |
| Inventory car | {{VEHICLE_CONDITION}} | The localized and normalized vehicle condition. | gebraucht for German, used for English |
| Inventory car | {{VEHICLE_COLOR}} | The localized and normalized primary exterior color. | gruen for German, green for English |
| Inventory car | {{GENERATED_SLUG}} | The complete generated path after the localized inventory path, including every required path component. | 2562072/mini-cooper-classic-trim-gebraucht-gruen |
| Shop product | {{LOCALIZED_PATHNAME}} | The localized path segment configured for shop products in the current language. | produkte for German, products for English |
| Shop product | {{PRODUCT_ID}} | The stable product identifier, without the Shopify GID prefix. | 987654321 |
| Shop product | {{PRODUCT_TITLE}} | The normalized, localized public product title. | mini-dachbox |
| Shop product | {{PRODUCT_SLUG}} | The normalized product slug used for routing. | mini-dachbox |
| Shop product | {{GENERATED_SLUG}} | The complete generated product-specific path remainder. | mini-dachbox-987654321 |
| Shop collection | {{LOCALIZED_PATHNAME}} | The localized path segment configured for shop collections in the current language. | kollektionen for German, collections for English |
| Shop collection | {{COLLECTION_ID}} | The stable collection identifier, without the Shopify GID prefix. | 44556677 |
| Shop collection | {{COLLECTION_TITLE}} | The normalized, localized public collection title. | mini-zubehoer |
| Shop collection | {{COLLECTION_HANDLE}} | The normalized Shopify collection handle. | mini-accessories |
| Shop collection | {{COLLECTION_SLUG}} | The generated collection slug used for routing. | mini-accessories |
| Shop collection | {{GENERATED_SLUG}} | The complete generated collection-specific path remainder. | mini-accessories |
| Car deal | {{LOCALIZED_PATHNAME}} | The localized path segment extracted from the canonical generated slug. | angebote for German, deals for English |
| Car deal | {{DEAL_ID}} | The stable deal identifier. | 42 |
| Car deal | {{DEAL_TITLE}} | The normalized, localized public deal title. | bmw-ix1-leasing |
| Car deal | {{DEAL_TYPE}} | The normalized deal or audience type. | privat |
| Car deal | {{VEHICLE_BRAND}} | The normalized brand of the linked vehicle. | bmw |
| Car deal | {{VEHICLE_MODEL}} | The normalized model of the linked vehicle. | ix1 |
| Car deal | {{VEHICLE_SERIES}} | The normalized model series of the linked vehicle. | u11 |
| Car deal | {{VEHICLE_CATEGORY}} | The normalized, localized vehicle category. | gelaendewagen |
| Car deal | {{GENERATED_SLUG}} | The complete generated deal-specific path remainder. | 42/bmw-ix1-leasing |
| Generic page | {{PAGE_ID}} | The stable page identifier. | clx123abc |
| Generic page | {{PAGE_NAME}} | The normalized internal page name. | ueber-uns |
| Generic page | {{PUBLIC_NAME}} | The normalized, localized public page name. | ueber-uns |
| Generic page | {{PAGE_TYPE}} | The normalized page type. | general |
| Generic page | {{GENERATED_SLUG}} | The complete page-relative slug, including nested path components. | unternehmen/ueber-uns |
Example templates:
Inventory car: /{{LOCALIZED_PATHNAME}}/{{INVENTORY_ID}}/{{VEHICLE_SLUG}}
Shop product: /{{LOCALIZED_PATHNAME}}/{{PRODUCT_SLUG}}-{{PRODUCT_ID}}
Shop collection: /{{LOCALIZED_PATHNAME}}/{{COLLECTION_HANDLE}}
Car deal: /{{LOCALIZED_PATHNAME}}/{{VEHICLE_BRAND}}-{{VEHICLE_MODEL}}-{{DEAL_ID}}
Generic page: /{{PAGE_TYPE}}/{{PUBLIC_NAME}}The locale prefix remains automatic and is not part of the template. Prefer stable identifiers plus descriptive fields. Do not use mutable data such as price, mileage, stock, tags, or validity dates because those values would cause unnecessary URL changes.
Code inventory
The fixed names above are the complete set of literal CMS variable names used
by the backend. The other variable reads use getAllVariables for localized
template and metadata rendering. The AI/MCP variable operations require the
same uppercase-and-underscore naming convention and do not introduce another
required system variable.