Edit metadata management and robots exclusion protocol
This commit is contained in:
parent
d149a90c80
commit
cea8f504df
21 changed files with 282 additions and 144 deletions
19
site/blueprints/files/meta_image.yml
Normal file
19
site/blueprints/files/meta_image.yml
Normal file
|
@ -0,0 +1,19 @@
|
|||
title: Meta image
|
||||
accept:
|
||||
mime: image/jpeg, image/png
|
||||
fields:
|
||||
crop:
|
||||
label:
|
||||
en: Social networks image crop
|
||||
fr: Recadrage pour les réseaux sociaux
|
||||
type: imagecrop
|
||||
minSize:
|
||||
width: 1200
|
||||
height: 675
|
||||
preserveAspectRatio: true
|
||||
width: 1/2
|
||||
alt_text:
|
||||
label:
|
||||
en: Alternative text
|
||||
fr: Texte alternatif
|
||||
type: text
|
14
site/blueprints/sections/generic_seo_meta_image.yml
Normal file
14
site/blueprints/sections/generic_seo_meta_image.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
headline: Image
|
||||
type: files
|
||||
template: meta_image
|
||||
layout: cards
|
||||
size: small
|
||||
image:
|
||||
query: file.croppedImage
|
||||
ratio: 16/9
|
||||
cover: false
|
||||
back: white
|
||||
max: 1
|
||||
help:
|
||||
en: "Image displayed by social networks (format: JPEG or PNG)."
|
||||
fr: "Image affichée par les réseaux sociaux (format : JPEG ou PNG)."
|
|
@ -5,52 +5,13 @@ fields:
|
|||
type: textarea
|
||||
size: small
|
||||
buttons: false
|
||||
# required: true
|
||||
help:
|
||||
en: "Short description of the page displayed by search engines and social networks (recommended maximum length: 160 characters)."
|
||||
fr: "Courte description de la page affichée par les moteurs de recherche et les réseaux sociaux (taille maximale conseillée : 160 caractères)."
|
||||
width: 3/4
|
||||
gap:
|
||||
type: gap
|
||||
width: 1/4
|
||||
meta_image:
|
||||
label: Image
|
||||
type: files
|
||||
layout: cardlets
|
||||
image:
|
||||
cover: true
|
||||
back: white
|
||||
multiple: false
|
||||
# required: true
|
||||
help:
|
||||
en: "Image displayed by social networks (format: JPEG or PNG)."
|
||||
fr: "Image affichée par les réseaux sociaux (format : JPEG ou PNG)."
|
||||
width: 1/4
|
||||
# Hidden fields
|
||||
og_image:
|
||||
type: hidden
|
||||
default:
|
||||
og_type:
|
||||
type: hidden
|
||||
default: article
|
||||
twitter_image:
|
||||
type: hidden
|
||||
default:
|
||||
twitter_card_type:
|
||||
type: hidden
|
||||
default: summary_large_image
|
||||
robots_noindex:
|
||||
type: hidden
|
||||
default: default
|
||||
robots_nofollow:
|
||||
type: hidden
|
||||
default: default
|
||||
robots_noarchive:
|
||||
type: hidden
|
||||
default: default
|
||||
robots_noimageindex:
|
||||
type: hidden
|
||||
default: default
|
||||
robots_nosnippet:
|
||||
type: hidden
|
||||
default: default
|
||||
|
|
|
@ -10,4 +10,5 @@ create: false
|
|||
layout: cardlets
|
||||
image:
|
||||
cover: true
|
||||
query: page.images.template('image').first
|
||||
back: white
|
||||
|
|
|
@ -2,5 +2,10 @@ label:
|
|||
en: SEO
|
||||
fr: Référencement
|
||||
icon: search
|
||||
sections:
|
||||
seo_basic_meta: sections/generic_seo_metadata
|
||||
columns:
|
||||
- width: 3/4
|
||||
sections:
|
||||
seo_basic_meta: sections/generic_seo_metadata
|
||||
- width: 1/3
|
||||
sections:
|
||||
seo_meta_image: sections/generic_seo_meta_image
|
||||
|
|
|
@ -2,5 +2,10 @@ label:
|
|||
en: SEO
|
||||
fr: Référencement
|
||||
icon: search
|
||||
sections:
|
||||
seo_basic_meta: sections/generic_seo_metadata
|
||||
columns:
|
||||
- width: 3/4
|
||||
sections:
|
||||
seo_basic_meta: sections/generic_seo_metadata
|
||||
- width: 1/3
|
||||
sections:
|
||||
seo_meta_image: sections/generic_seo_meta_image
|
||||
|
|
|
@ -2,5 +2,10 @@ label:
|
|||
en: SEO
|
||||
fr: Référencement
|
||||
icon: search
|
||||
sections:
|
||||
seo_basic_meta: sections/generic_seo_metadata
|
||||
columns:
|
||||
- width: 3/4
|
||||
sections:
|
||||
seo_basic_meta: sections/generic_seo_metadata
|
||||
- width: 1/3
|
||||
sections:
|
||||
seo_meta_image: sections/generic_seo_meta_image
|
||||
|
|
|
@ -7,16 +7,10 @@ return [
|
|||
'language' => 'fr',
|
||||
'css' => 'assets/css/panel.min.css'
|
||||
],
|
||||
// Meta Knight plugin options
|
||||
'diesdasdigital.meta-knight' => [
|
||||
'siteTitleAfterPageTitle' => false,
|
||||
'separator' => ' | ',
|
||||
'metaAuthor' => false
|
||||
],
|
||||
// Sitemapper plugin options
|
||||
'kirbyzone.sitemapper' => [
|
||||
'intro' => false,
|
||||
'byLine' => 'Sitemap automatically generated by Sitemapper, by <a href="https://github.com/kirbyzone" target="_blank">Kirbyzone</a>.'
|
||||
'byLine' => 'Sitemap generated with Sitemapper by <a href="https://github.com/kirbyzone" target="_blank">Kirbyzone</a>.'
|
||||
],
|
||||
// Hooks
|
||||
'hooks' => [
|
||||
|
@ -28,23 +22,6 @@ return [
|
|||
]);
|
||||
}
|
||||
},
|
||||
'page.update:after' => function($newPage) {
|
||||
// Populate page og_image and twitter_image fields with page meta_image field value after page update
|
||||
if ($newPage->meta_image()) {
|
||||
$newPage->update([
|
||||
'og_image' => $newPage->meta_image()->value(),
|
||||
'twitter_image' => $newPage->meta_image()->value()
|
||||
]);
|
||||
}
|
||||
// Populate site meta_description, og_image and twitter_image fields with home page meta_description, og_image and twitter_image fields value after home page update
|
||||
if ($newPage->template()->name() === 'home' && $newPage->meta_description()) {
|
||||
$this->site()->update([
|
||||
'meta_description' => $newPage->meta_description()->value(),
|
||||
'og_image' => $newPage->og_image()->value(),
|
||||
'twitter_image' => $newPage->twitter_image()->value()
|
||||
]);
|
||||
}
|
||||
},
|
||||
'kirbytext:after' => function (string $text) {
|
||||
// Replace any HTML <h1> or <h2> tag by <h3> tag after Markdown parsing
|
||||
return preg_replace(['/<h1>|<h2>/', '/<\/h1>|<\/h2>/'], ['<h3>', '</h3>'], $text);
|
||||
|
|
5
site/snippets/favicon.twig
Normal file
5
site/snippets/favicon.twig
Normal file
|
@ -0,0 +1,5 @@
|
|||
<!-- Favicon -->
|
||||
<link rel="icon" sizes="any" href="assets/favicon/xiao-wang-favicon.ico">
|
||||
<link rel="icon" type="image/svg+xml" href="assets/favicon/xiao-wang-favicon.svg">
|
||||
<link rel="apple-touch-icon" href="assets/favicon/xiao-wang-apple-touch-icon.png">
|
||||
<link rel="manifest" href="assets/favicon/xiao-wang.webmanifest">
|
73
site/snippets/metadata.twig
Normal file
73
site/snippets/metadata.twig
Normal file
|
@ -0,0 +1,73 @@
|
|||
<!-- Basic metadata -->
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<html lang="fr">
|
||||
|
||||
<!-- Schema -->
|
||||
<style itemscope itemtype="https://schema.org/WebSite" itemref="schema_name schema_description schema_image"></style>
|
||||
|
||||
<!-- Title -->
|
||||
<title>{{ site.title }} | {{ page.title }}</title>
|
||||
<meta id="schema_name" itemprop="name" content="{{ site.title }} | {{ page.title }}">
|
||||
|
||||
<!-- Description -->
|
||||
{% if page.meta_description is not empty %}
|
||||
<meta name="description" content="{{ page.meta_description }}">
|
||||
<meta id="schema_description" itemprop="description" content="{{ page.meta_description }}">
|
||||
{% elseif site.homePage.meta_description is not empty %}
|
||||
<meta name="description" content="{{ site.homePage.meta_description }}">
|
||||
<meta id="schema_description" itemprop="description" content="{{ site.homePage.meta_description }}">
|
||||
{% endif %}
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="{{ page.url }}">
|
||||
|
||||
<!-- Author -->
|
||||
<meta name="author" content="{{ site.title }}">
|
||||
|
||||
<!-- Date -->
|
||||
<meta name="date" content="{{ page.modified('Y-m-d') }}">
|
||||
|
||||
<!-- Image -->
|
||||
{% if page.images.template('meta_image') is not empty %}
|
||||
<meta id="schema_image" itemprop="image" content="{{ page.images.template('meta_image').first.url }}">
|
||||
{% elseif site.homePage.images.template('meta_image') is not empty %}
|
||||
<meta id="schema_image" itemprop="image" content="{{ site.homePage.images.template('meta_image').first.url }}">
|
||||
{% endif %}
|
||||
|
||||
{% if page.template != 'error' %}
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:title" content="{{ site.title ~ ' | ' ~ page.title }}">
|
||||
{% if page.meta_description is not empty %}
|
||||
<meta property="og:description" content="{{ page.meta_description }}">
|
||||
{% elseif site.homePage.meta_description is not empty %}
|
||||
<meta property="og:description" content="{{ site.homePage.meta_description }}">
|
||||
{% endif %}
|
||||
{% if page.images.template('meta_image') is not empty %}
|
||||
<meta property="og:image" content="{{ page.images.template('meta_image').first.croppedImage.resize(1200, 675).url }}">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="675">
|
||||
{% elseif site.homePage.images.template('meta_image') is not empty %}
|
||||
<meta property="og:image" content="{{ site.homePage.images.template("meta_image").first.croppedImage.resize(1200, 675).url }}">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="675">
|
||||
{% endif %}
|
||||
<meta property="og:url" content="{{ page.url }}">
|
||||
<meta property="og:type" content="{{ page.og_type }}">
|
||||
|
||||
<!-- Twitter Card -->
|
||||
<meta name="twitter:card" content="{{ page.twitter_card_type.value }}">
|
||||
<meta name="twitter:title" content="{{ site.title ~ ' | ' ~ page.title }}">
|
||||
{% if page.meta_description is not empty %}
|
||||
<meta name="twitter:description" content="{{ page.meta_description }}">
|
||||
{% elseif site.homePage.meta_description is not empty %}
|
||||
<meta name="twitter:description" content="{{ site.homePage.meta_description }}">
|
||||
{% endif %}
|
||||
{% if page.images.template('meta_image') is not empty %}
|
||||
<meta name="twitter:image" content="{{ page.images.template('meta_image').first.croppedImage.resize(1200, 675).url }}">
|
||||
{% elseif site.homePage.images.template('meta_image') is not empty %}
|
||||
<meta name="twitter:image" content="{{ site.homePage.images.template("meta_image").first.croppedImage.resize(1200, 675).url }}">
|
||||
{% endif %}
|
||||
|
||||
{% endif %}
|
|
@ -3,15 +3,9 @@
|
|||
<html lang="fr">
|
||||
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
{{ snippet('meta_information') }}
|
||||
{{ snippet('robots') }}
|
||||
<link rel="icon" sizes="any" href="assets/favicon/xiao-wang-favicon.ico">
|
||||
<link rel="icon" type="image/svg+xml" href="assets/favicon/xiao-wang-favicon.svg">
|
||||
<link rel="apple-touch-icon" href="assets/favicon/xiao-wang-apple-touch-icon.png">
|
||||
<link rel="manifest" href="assets/favicon/xiao-wang.webmanifest">
|
||||
|
||||
{{ snippet('metadata') }}
|
||||
{{ snippet('favicon') }}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ asset('assets/css/style.min.css') }}">
|
||||
|
@ -32,15 +26,17 @@
|
|||
</a>
|
||||
</div>
|
||||
|
||||
<nav class="header-bar__nav" aria-label="Menu">
|
||||
<button class="header-bar__nav-button" tabindex="-1" aria-hidden="true">
|
||||
<div class="header-bar__nav-button-line-1"></div>
|
||||
<div class="header-bar__nav-button-line-2"></div>
|
||||
<div class="header-bar__nav-button-line-3"></div>
|
||||
</button>
|
||||
<ul class="header-bar__nav-menu">
|
||||
</ul>
|
||||
</nav>
|
||||
{% if page != site.homePage %}
|
||||
<nav class="header-bar__nav" aria-label="Menu">
|
||||
<button class="header-bar__nav-button" tabindex="-1" aria-hidden="true">
|
||||
<div class="header-bar__nav-button-line-1"></div>
|
||||
<div class="header-bar__nav-button-line-2"></div>
|
||||
<div class="header-bar__nav-button-line-3"></div>
|
||||
</button>
|
||||
<ul class="header-bar__nav-menu">
|
||||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
|
||||
|
@ -75,7 +71,7 @@
|
|||
</a>
|
||||
</div>
|
||||
<div class="footer-bar__copyright">
|
||||
<p>© {{ 'now' | date('Y') }} {{ site.meta_author }}</p>
|
||||
<p>© {{ 'now' | date('Y') }} {{ site.title }}</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -15,8 +15,8 @@
|
|||
{% if page.text.isNotEmpty %}
|
||||
<div class="gallery__introduction">{{ page.text.kirbytext|raw }}</div>
|
||||
{% endif %}
|
||||
{% if page.files.isNotEmpty %}
|
||||
{% set artworks = page.files.sortBy('sort') %}
|
||||
{% if page.files.template("artwork").isNotEmpty %}
|
||||
{% set artworks = page.files.template("artwork").sortBy('sort') %}
|
||||
{% for artwork in artworks %}
|
||||
<figure class="gallery__artwork">
|
||||
{% if artwork.type == 'video' %}
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
{% set navItemNo = navItemNo + 1 %}
|
||||
{% endfor %}
|
||||
<div class="home__nav-image" aria-hidden="true">
|
||||
<img src="{{ page.image.url }}" srcset="{{ page.image.srcset() }}" alt="{{ page.image.alt_text }}">
|
||||
<img src="{{ page.images.template("image").first.url }}" srcset="{{ page.images.template("image").first.srcset() }}" alt="{{ page.images.template("image").first.alt_text }}">
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue