Skip to content

Instantly share code, notes, and snippets.

@alexander-schranz
Last active February 27, 2026 22:59
Show Gist options
  • Select an option

  • Save alexander-schranz/b27d69a85f9a72afc1bf0b2b29667e63 to your computer and use it in GitHub Desktop.

Select an option

Save alexander-schranz/b27d69a85f9a72afc1bf0b2b29667e63 to your computer and use it in GitHub Desktop.
Complex Sulu Seo Twig Template
{%- spaceless %}
{% set metaPublisher = 'Sulu GmbH' %}
{% set metaClientName = 'Sulu' %}
{% set metaCopyright = 'Sulu GmbH' %}
{% set metaLocaleParts = app.request.locale|split('_') %}
{% set metaLanguage = metaLocaleParts[0] %}
{% set metaCountry = metaLocaleParts[1]|default(null) %}
{% set metaLocale = metaLocaleParts|length == 1 ? metaLanguage : metaLanguage ~ '_' ~ metaCountry|upper %}
{% set metaUrl = app.request.uri %}
{# Get meta title #}
{% set metaTitle = extension.seo.title|default(content.title|default('')) %}
{# Get meta description #}
{% set metaDescription = extension.seo.description|default(content.description|default('')|striptags) %}
{% if metaDescription|trim %}
{% set metaDescription = metaDescription|length > 320 ? metaDescription|slice(0, 316) ~ ' ...' : metaDescription %}
{% endif %}
{# Get meta image #}
{% set metaImageFormat = '800x' %}
{% set metaImage = metaImage|default(extension.excerpt.images[0].thumbnails[metaImageFormat]|default()) %}
{% set metaImage = metaImage|default(content.images[0].thumbnails[metaImageFormat]|default()) %}
{% set metaImage = metaImage|default('/website/images/logo.svg') %}
{% set metaImage = absolute_url(asset(metaImage)) %}
{% set metaDefaultTags = {
'language': metaLanguage,
'publisher': metaPublisher,
'author': metaClientName,
'copyright': metaCopyright,
'audience': 'all',
'distribution': 'global',
'image': metaImage,
} %}
{% set metaDCTags = {
'DC.Title': metaTitle,
'DC.Publisher': metaPublisher,
'DC.Copyright': metaCopyright,
} %}
{% set metaTwitterTags = {
'twitter:card': 'summary',
'twitter:url': metaUrl,
'twitter:title': metaTitle,
'twitter:description': metaDescription,
'twitter:image': metaImage,
} %}
{% set ogMetaTags = {
'og:site_name': metaClientName,
'og:url': metaUrl,
'og:title': metaTitle,
'og:image': metaImage,
'og:type': 'website',
'og:description': metaDescription,
'og:locale': metaLocale
} %}
{% endspaceless -%}
{# Default Seo: http://blog.sulu.io/new-in-sulu-1-4-customizable-seo-tags #}
{%- embed '@SuluWebsite/Extension/seo.html.twig' with {
seo: extension.seo|default([]),
content: content|default([]),
urls: urls|default([]),
shadowBaseLocale: shadowBaseLocale|default(),
defaultLocale: request.defaultLocale|default('en')
} -%}
{% block title %}
{% if not seoTitle -%}
{% set seoTitle = app.request.pathInfo|split('/')|last|replace({'-': '_'})|humanize %}
{%- endif -%}
<title>{{ seoTitle }} - {{ metaClientName }}</title>
{%- endblock -%}
{%- block description -%}
{%- if seoDescription|default(metaDescription) -%}
<meta name="description" content="{{ seoDescription|default(metaDescription) }}"/>
{%- endif -%}
{%- endblock -%}
{%- endembed %}
{# Meta Default Tags #}
{% block metaDefaultTags %}
{% for property, value in metaDefaultTags if value %}
<meta name="{{ property }}" content="{{ value }}"/>
{% endfor %}
{% endblock %}
{# Meta DC Tags #}
{% block metaDCTags %}
{% for property, value in metaDCTags if value %}
<meta name="{{ property }}" content="{{ value }}"/>
{% endfor %}
{% endblock %}
{# Meta Twitter Tags #}
{% block metaTwitterTags %}
{% for property, value in metaTwitterTags if value %}
<meta name="{{ property }}" content="{{ value }}"/>
{% endfor %}
{% endblock %}
{# Meta OG Tags #}
{% block ogMetaTags %}
{% for property, value in ogMetaTags if value %}
<meta property="{{ property }}" content="{{ value }}"/>
{% endfor %}
{% endblock %}
{# Pagination #}
{% if prevPageUrl|default -%}
<link rel="prev" href="{{ absolute_url(prevPageUrl)|trim('?') }}">
{%- endif -%}
{% if nextPageUrl|default -%}
<link rel="next" href="{{ absolute_url(nextPageUrl)|trim('?') }}">
{%- endif -%}
{% if view.pages is defined and (view.pages.page != 1 or view.pages.hasNextPage) %}
{% if view.pages.page != 1 %}
<link rel="prev" href="{{ absolute_url('?page=' ~ (view.pages.page - 1))|replace({'?page=1': ''}) }}">
{% endif %}
{% if view.pages.hasNextPage %}
<link rel="next" href="{{ absolute_url('?page=' ~ (view.pages.page + 1)) }}">
{% endif %}
{% endif %}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment