Add more features for SEO
This commit is contained in:
206
docs/SEO-CHECKLIST.md
Normal file
206
docs/SEO-CHECKLIST.md
Normal file
@@ -0,0 +1,206 @@
|
||||
# SEO Implementation Checklist - Mistergeek
|
||||
|
||||
This checklist tracks the implementation of advanced SEO features for the Mistergeek Hugo site.
|
||||
|
||||
## ✅ Completed Features
|
||||
|
||||
### 1. Translation & Documentation
|
||||
- [x] Translated `seo-recommendations-fr.md` to `seo-recommendations-en.md`
|
||||
- [x] Created comprehensive English SEO documentation
|
||||
|
||||
### 2. Performance Optimizations
|
||||
- [x] Created `layouts/partials/seo/head-performance.html`
|
||||
- [x] Added DNS prefetch and preconnect for external resources
|
||||
- [x] Implemented resource hints for fonts and CDNs
|
||||
- [x] Added performance meta tags
|
||||
|
||||
### 3. Advanced Schema.org Structured Data
|
||||
- [x] Enhanced `layouts/partials/seo/structured-data.html`
|
||||
- [x] Created `layouts/partials/seo/schema-article.html` - TechArticle schema
|
||||
- [x] Created `layouts/partials/seo/schema-tutorial.html` - HowTo schema
|
||||
- [x] Created `layouts/partials/seo/schema-local.html` - Local SEO schema
|
||||
|
||||
### 4. Multi-language Support
|
||||
- [x] Created `layouts/partials/seo/hreflang.html`
|
||||
- [x] Added French regional variations (fr-fr, fr-be, fr-ca, fr-ch, fr-lu)
|
||||
- [x] Implemented x-default fallback
|
||||
|
||||
### 5. Dynamic Meta Tags
|
||||
- [x] Created `layouts/partials/seo/meta-dynamic.html`
|
||||
- [x] Section-specific meta descriptions (tutorials, comparisons, security, wordpress)
|
||||
- [x] Dynamic keywords based on content type
|
||||
- [x] Article-specific meta tags
|
||||
|
||||
### 6. Local SEO Configuration
|
||||
- [x] Added French market local SEO
|
||||
- [x] Google My Business schema
|
||||
- [x] Educational organization markup
|
||||
- [x] Contact point and social profiles
|
||||
|
||||
### 7. Enhanced Configuration
|
||||
- [x] Updated `hugo.toml` with advanced SEO settings
|
||||
- [x] Added image optimization settings
|
||||
- [x] Configured analytics integration
|
||||
- [x] Added social media profiles
|
||||
|
||||
## 📋 Pre-launch SEO Checklist
|
||||
|
||||
### Technical SEO
|
||||
- [ ] Verify all meta tags are present
|
||||
- [ ] Test Schema.org markup with Google's Rich Results Test
|
||||
- [ ] Validate structured data
|
||||
- [ ] Check page loading speed (Core Web Vitals)
|
||||
- [ ] Test mobile responsiveness
|
||||
- [ ] Verify HTTPS implementation
|
||||
- [ ] Check robots.txt file
|
||||
|
||||
### Content SEO
|
||||
- [ ] Optimize meta descriptions for key pages
|
||||
- [ ] Ensure unique title tags for all pages
|
||||
- [ ] Add alt text to all images
|
||||
- [ ] Create XML sitemap
|
||||
- [ ] Set up 404 error page
|
||||
- [ ] Implement canonical URLs
|
||||
|
||||
### Analytics & Monitoring
|
||||
- [ ] Set up Google Analytics 4
|
||||
- [ ] Configure Google Search Console
|
||||
- [ ] Set up Bing Webmaster Tools
|
||||
- [ ] Create Yandex Webmaster account
|
||||
- [ ] Install SEO monitoring tools
|
||||
|
||||
### Social Media
|
||||
- [ ] Verify Open Graph tags
|
||||
- [ ] Test Twitter Cards
|
||||
- [ ] Check social media meta tags
|
||||
- [ ] Validate social media images
|
||||
|
||||
## 📊 Post-launch Monitoring
|
||||
|
||||
### Weekly Tasks
|
||||
- [ ] Check Google Search Console for crawl errors
|
||||
- [ ] Monitor 404 errors
|
||||
- [ ] Review search performance metrics
|
||||
- [ ] Check page loading speeds
|
||||
|
||||
### Monthly Tasks
|
||||
- [ ] Analyze keyword positions
|
||||
- [ ] Review backlink profile
|
||||
- [ ] Audit internal linking
|
||||
- [ ] Update outdated content
|
||||
- [ ] Check competitor analysis
|
||||
|
||||
### Quarterly Tasks
|
||||
- [ ] Comprehensive SEO audit
|
||||
- [ ] Update Schema markup
|
||||
- [ ] Review and update meta descriptions
|
||||
- [ ] Analyze user engagement metrics
|
||||
- [ ] Update local SEO information
|
||||
|
||||
## 🔧 Configuration Required
|
||||
|
||||
### Google Analytics Setup
|
||||
1. Replace `G-XXXXXXXXXX` in `hugo.toml` with your actual Google Analytics 4 ID
|
||||
2. Replace `GTM-XXXXXXX` with your Google Tag Manager ID
|
||||
|
||||
### Search Console Verification
|
||||
1. Add your verification codes to `hugo.toml`:
|
||||
```toml
|
||||
[params.seo.verification]
|
||||
google = "your-google-verification-code"
|
||||
bing = "your-bing-verification-code"
|
||||
```
|
||||
|
||||
### Social Media URLs
|
||||
Update the social media URLs in the schema files:
|
||||
- `layouts/partials/seo/schema-local.html`
|
||||
- `layouts/partials/seo/schema-article.html`
|
||||
|
||||
### Local SEO Information
|
||||
Update the local business information in:
|
||||
- `layouts/partials/seo/schema-local.html`
|
||||
- Business address, phone, email
|
||||
|
||||
## 🎯 SEO Monitoring Tools
|
||||
|
||||
### Essential Tools
|
||||
- Google Search Console
|
||||
- Google Analytics 4
|
||||
- Google PageSpeed Insights
|
||||
- Schema Markup Validator
|
||||
- Mobile-Friendly Test
|
||||
|
||||
### Advanced Tools
|
||||
- Ahrefs or SEMrush
|
||||
- Screaming Frog SEO Spider
|
||||
- GTmetrix
|
||||
- Bing Webmaster Tools
|
||||
- Yandex Webmaster
|
||||
|
||||
### French Market Tools
|
||||
- Yooda Insight (French SEO tool)
|
||||
- SEMrush.fr
|
||||
- Ahrefs France
|
||||
- Local SEO France directories
|
||||
|
||||
## 🚀 Next Steps
|
||||
|
||||
1. **Immediate (Week 1)**
|
||||
- Set up Google Analytics 4
|
||||
- Configure Google Search Console
|
||||
- Submit sitemap to search engines
|
||||
- Test all Schema markup
|
||||
|
||||
2. **Short-term (Month 1)**
|
||||
- Monitor search performance
|
||||
- Optimize top pages
|
||||
- Build initial backlinks
|
||||
- Create social media profiles
|
||||
|
||||
3. **Long-term (Quarter 1)**
|
||||
- Content optimization
|
||||
- Link building campaigns
|
||||
- Local SEO optimization
|
||||
- Competitor analysis
|
||||
|
||||
## 📈 Key Performance Indicators (KPIs)
|
||||
|
||||
### Traffic Metrics
|
||||
- Organic search traffic growth
|
||||
- Click-through rate (CTR)
|
||||
- Bounce rate
|
||||
- Average session duration
|
||||
- Pages per session
|
||||
|
||||
### Technical Metrics
|
||||
- Page loading speed
|
||||
- Core Web Vitals scores
|
||||
- Mobile usability score
|
||||
- Schema markup errors
|
||||
- Crawl errors
|
||||
|
||||
### Business Metrics
|
||||
- Keyword rankings
|
||||
- Conversion rate
|
||||
- Return on investment (ROI)
|
||||
- Local search visibility
|
||||
- Brand mentions
|
||||
|
||||
## 🛠️ Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
- Schema markup errors: Use Google's Rich Results Test
|
||||
- Slow loading: Check PageSpeed Insights
|
||||
- Mobile issues: Use Mobile-Friendly Test
|
||||
- Indexing problems: Check Search Console coverage report
|
||||
|
||||
### Support Resources
|
||||
- Google SEO Starter Guide (French)
|
||||
- Schema.org documentation
|
||||
- Hugo community forums
|
||||
- French SEO communities
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: 2024-01-15
|
||||
**Next Review**: 2024-02-15
|
||||
363
docs/seo-recommendations-en.md
Normal file
363
docs/seo-recommendations-en.md
Normal file
@@ -0,0 +1,363 @@
|
||||
# Advanced SEO Recommendations - Hugo Mistergeek
|
||||
|
||||
## Overview
|
||||
|
||||
This document provides advanced SEO recommendations specifically tailored for the Hugo Mistergeek blog, a French-speaking site covering technology and computing topics. The recommendations take into account the existing SEO implementation and propose targeted improvements to maximize visibility in the French-speaking market.
|
||||
|
||||
## Current SEO Implementation Status ✅
|
||||
|
||||
### ✅ Successfully Implemented
|
||||
- **Essential meta tags** (description, keywords, author)
|
||||
- **Open Graph** for social networks
|
||||
- **Twitter Cards** with optimized images
|
||||
- **Schema.org** (JSON-LD) for structured data
|
||||
- **Favicons** multi-format and PWA support
|
||||
- **Canonical URLs** and hreflang
|
||||
- **XML sitemap generation** via Hugo
|
||||
|
||||
## SEO Improvement Recommendations
|
||||
|
||||
### 1. French Content Optimization
|
||||
|
||||
#### URL Structure
|
||||
```yaml
|
||||
# Recommendation: Optimize for French
|
||||
Old structure: /post/2023-11-wordpress-creation-site/
|
||||
New structure: /tutorials/wordpress/create-wordpress-site-complete-guide/
|
||||
```
|
||||
|
||||
#### Keyword Strategy for French Market
|
||||
```yaml
|
||||
# Main keywords (high competition)
|
||||
- "computer tutorial"
|
||||
- "technology guide"
|
||||
- "IT solutions"
|
||||
|
||||
# Long-tail keywords (French)
|
||||
- "how to create a WordPress site in French"
|
||||
- "best free antivirus for Windows 10 in 2024"
|
||||
- "computer security tutorial for beginners"
|
||||
|
||||
# Language variations
|
||||
- English: "computer tutorial" → French: "tutoriel informatique"
|
||||
- English: "how to" → French: "how", "guide", "tutorial"
|
||||
```
|
||||
|
||||
### 2. Advanced Technical Optimization
|
||||
|
||||
#### Performance and Core Web Vitals
|
||||
```html
|
||||
<!-- Add in layouts/partials/head-performance.html -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="dns-prefetch" href="//www.google-analytics.com">
|
||||
<link rel="dns-prefetch" href="//googletagmanager.com">
|
||||
```
|
||||
|
||||
#### Strategic Lazy Loading
|
||||
```html
|
||||
<!-- For images in articles -->
|
||||
<img
|
||||
src="/images/placeholder.svg"
|
||||
data-src="/images/article-image.jpg"
|
||||
alt="WordPress Tutorial - Create a Professional Site"
|
||||
loading="lazy"
|
||||
width="800"
|
||||
height="400"
|
||||
/>
|
||||
```
|
||||
|
||||
### 3. Enhanced Schema.org
|
||||
|
||||
#### Article Schema with Detailed Author
|
||||
```json
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "TechArticle",
|
||||
"headline": "Complete WordPress Guide 2024",
|
||||
"description": "Create your WordPress site in French with this step-by-step guide",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "Mistergeek",
|
||||
"url": "https://www.mistergeek.net/",
|
||||
"sameAs": [
|
||||
"https://twitter.com/mistergeekfrance",
|
||||
"https://www.linkedin.com/in/mistergeek"
|
||||
]
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "Mistergeek",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "https://www.mistergeek.net/assets/images/logo.png"
|
||||
}
|
||||
},
|
||||
"inLanguage": "fr-FR",
|
||||
"datePublished": "2024-01-15",
|
||||
"dateModified": "2024-01-15",
|
||||
"keywords": ["wordpress", "french tutorial", "create website"]
|
||||
}
|
||||
```
|
||||
|
||||
#### BreadcrumbList for Navigation
|
||||
```json
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
"itemListElement": [
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 1,
|
||||
"name": "Home",
|
||||
"item": "https://www.mistergeek.net/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 2,
|
||||
"name": "Tutorials",
|
||||
"item": "https://www.mistergeek.net/tutorials/"
|
||||
},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "WordPress",
|
||||
"item": "https://www.mistergeek.net/tutorials/wordpress/"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Local SEO for French Market
|
||||
|
||||
#### Google My Business
|
||||
```json
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "Mistergeek",
|
||||
"url": "https://www.mistergeek.net",
|
||||
"logo": "https://www.mistergeek.net/assets/images/logo.png",
|
||||
"contactPoint": {
|
||||
"@type": "ContactPoint",
|
||||
"contactType": "support",
|
||||
"email": "contact@mistergeek.net",
|
||||
"availableLanguage": ["French"]
|
||||
},
|
||||
"sameAs": [
|
||||
"https://twitter.com/mistergeekfrance",
|
||||
"https://www.youtube.com/@mistergeek"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Meta Tags Enhancement
|
||||
|
||||
#### Dynamic Meta Tags by Content Type
|
||||
```go
|
||||
<!-- layouts/partials/seo/meta-dynamic.html -->
|
||||
{{- if eq .Section "tutorials" }}
|
||||
<meta name="description" content="Complete tutorial {{ .Title }}. Learn {{ .Params.skill }} in French with our step-by-step guide.">
|
||||
<meta name="keywords" content="tutorial {{ .Params.category }}, french guide {{ .Params.skill }}, {{ .Title | lower }}">
|
||||
{{- else if eq .Section "comparisons" }}
|
||||
<meta name="description" content="Detailed comparison {{ .Title }}. Which to choose in 2024? Complete reviews and tests.">
|
||||
{{- end }}
|
||||
```
|
||||
|
||||
### 6. Multi-language Optimization
|
||||
|
||||
#### hreflang for French
|
||||
```html
|
||||
<!-- In layouts/partials/seo/hreflang.html -->
|
||||
<link rel="alternate" hreflang="fr-fr" href="https://www.mistergeek.net{{ .RelPermalink }}" />
|
||||
<link rel="alternate" hreflang="fr-be" href="https://www.mistergeek.net/be{{ .RelPermalink }}" />
|
||||
<link rel="alternate" hreflang="fr-ca" href="https://www.mistergeek.net/ca{{ .RelPermalink }}" />
|
||||
<link rel="alternate" hreflang="x-default" href="https://www.mistergeek.net{{ .RelPermalink }}" />
|
||||
```
|
||||
|
||||
### 7. Tutorial Data Structure
|
||||
|
||||
#### Tutorial Schema
|
||||
```json
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "HowTo",
|
||||
"name": "Create a WordPress Site",
|
||||
"description": "Complete guide to create your WordPress site in French",
|
||||
"image": "https://www.mistergeek.net/assets/images/wordpress-guide.jpg",
|
||||
"totalTime": "PT30M",
|
||||
"estimatedCost": {
|
||||
"@type": "MonetaryAmount",
|
||||
"currency": "EUR",
|
||||
"value": "0"
|
||||
},
|
||||
"supply": [
|
||||
{
|
||||
"@type": "HowToSupply",
|
||||
"name": "WordPress"
|
||||
},
|
||||
{
|
||||
"@type": "HowToSupply",
|
||||
"name": "Web hosting"
|
||||
}
|
||||
],
|
||||
"tool": [
|
||||
{
|
||||
"@type": "HowToTool",
|
||||
"name": "WordPress"
|
||||
}
|
||||
],
|
||||
"step": [
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"name": "WordPress Installation",
|
||||
"text": "Download and install WordPress"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 8. Image Optimization
|
||||
|
||||
#### SEO Image Structure
|
||||
```yaml
|
||||
# config.toml - Image configuration
|
||||
[imaging]
|
||||
quality = 75
|
||||
resampleFilter = "lanczos"
|
||||
|
||||
[params.images]
|
||||
# Recommended dimensions for SEO
|
||||
og_image = "1200x630"
|
||||
twitter_image = "1200x675"
|
||||
thumbnail = "400x300"
|
||||
hero = "1920x1080"
|
||||
```
|
||||
|
||||
### 9. Strategic Internal Linking
|
||||
|
||||
#### Link Structure
|
||||
```markdown
|
||||
<!-- In content -->
|
||||
To go further, discover:
|
||||
- [Complete WordPress Guide](/tutorials/wordpress/complete-guide/)
|
||||
- [Best WordPress Plugins](/comparisons/plugins-wordpress-2024/)
|
||||
- [WordPress Security](/security/wordpress-security-maximum/)
|
||||
```
|
||||
|
||||
### 10. Advanced Hugo.toml Configuration
|
||||
|
||||
```toml
|
||||
# Advanced SEO Configuration
|
||||
[params.seo]
|
||||
# Existing configuration...
|
||||
|
||||
# Analytics
|
||||
google_analytics = "G-XXXXXXXXXX"
|
||||
google_tag_manager = "GTM-XXXXXXX"
|
||||
|
||||
# Rich Snippets
|
||||
enable_search_box = true
|
||||
enable_sitelinks_searchbox = true
|
||||
|
||||
# Social
|
||||
facebook_page = "mistergeek.fr"
|
||||
twitter_handle = "@mistergeekfrance"
|
||||
youtube_channel = "UCXXXXXXXXXXXXXXXXXXX"
|
||||
|
||||
# Local SEO
|
||||
[params.seo.local]
|
||||
enabled = true
|
||||
country = "FR"
|
||||
language = "fr"
|
||||
region = "Île-de-France"
|
||||
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
[markup.highlight]
|
||||
style = "github"
|
||||
lineNos = true
|
||||
codeFences = true
|
||||
|
||||
[sitemap]
|
||||
changefreq = "weekly"
|
||||
filename = "sitemap.xml"
|
||||
priority = 0.5
|
||||
|
||||
[privacy]
|
||||
[privacy.googleAnalytics]
|
||||
disable = false
|
||||
respectDoNotTrack = true
|
||||
```
|
||||
|
||||
### 11. Monitoring and Tools
|
||||
|
||||
#### SEO Monitoring Tools
|
||||
```yaml
|
||||
# To configure
|
||||
- Google Search Console: verify site
|
||||
- Google Analytics 4: advanced tracking
|
||||
- Bing Webmaster Tools: Bing indexing
|
||||
- Yandex Webmaster: Russian market
|
||||
- Ahrefs/SEMrush: competitive analysis
|
||||
```
|
||||
|
||||
### 12. Launch Checklist
|
||||
|
||||
#### Pre-launch SEO
|
||||
- [ ] Check all meta tags
|
||||
- [ ] Test rich snippets
|
||||
- [ ] Validate sitemap.xml
|
||||
- [ ] Configure Google Search Console
|
||||
- [ ] Configure Google Analytics 4
|
||||
- [ ] Test loading speed
|
||||
- [ ] Check for missing images
|
||||
- [ ] Test broken links
|
||||
- [ ] Validate Schema.org markup
|
||||
|
||||
#### Post-launch
|
||||
- [ ] Submit sitemap to Google
|
||||
- [ ] Monitor 404 errors
|
||||
- [ ] Analyze keyword positioning
|
||||
- [ ] Optimize pages with low CTR
|
||||
- [ ] Improve pages with high bounce rate
|
||||
|
||||
### 13. Performance Measurement
|
||||
|
||||
#### SEO KPIs to track
|
||||
```yaml
|
||||
Monthly:
|
||||
- Average keyword position
|
||||
- Click-through rate (CTR)
|
||||
- Indexed pages
|
||||
- Crawl errors
|
||||
- Loading speed
|
||||
|
||||
Quarterly:
|
||||
- Keyword market share
|
||||
- Quality backlinks
|
||||
- Authority Score (Domain Rating)
|
||||
- Organic traffic vs goals
|
||||
```
|
||||
|
||||
## Additional Resources
|
||||
|
||||
### French SEO Tools
|
||||
- **Google Search Console** - Main monitoring
|
||||
- **Screaming Frog** - Technical audit
|
||||
- **Ahrefs/SEMrush** - Competitive analysis
|
||||
- **GTmetrix** - Performance
|
||||
- **Schema Markup Validator** - Rich snippets
|
||||
|
||||
### Documentation
|
||||
- [Google SEO Starter Guide - French](https://support.google.com/webmasters/answer/7451184?hl=fr)
|
||||
- [Bing Webmaster Guidelines](https://www.bing.com/webmaster/help/webmaster-guidelines-30fba23a)
|
||||
- [Schema.org Documentation](https://schema.org/docs/documents.html)
|
||||
|
||||
### Community Support
|
||||
- [Webmaster Help Community - French](https://support.google.com/webmasters/community?hl=fr)
|
||||
- [Reddit r/SEO](https://www.reddit.com/r/SEO/)
|
||||
- [Search Engine Journal - French](https://www.searchenginejournal.com/tag/french/)
|
||||
|
||||
This SEO guide is specifically adapted for the French-speaking market and takes into account the linguistic and cultural particularities of the Mistergeek target audience.
|
||||
52
hugo.toml
52
hugo.toml
@@ -15,29 +15,65 @@ ignoreLogs = ["warning-goldmark-raw-html"]
|
||||
|
||||
# SEO Configuration
|
||||
[params.seo]
|
||||
description = "Mistergeek - Tutoriels et guides en informatique"
|
||||
keywords = ["développement web", "technologies", "innovation", "solutions digitales", "mistergeek"]
|
||||
description = "Mistergeek - Tutoriels et guides en informatique et technologie en français"
|
||||
keywords = ["tutoriel informatique", "guide technologie", "solutions informatiques", "développement web", "technologies", "innovation", "mistergeek"]
|
||||
author = "Mistergeek"
|
||||
theme_color = "#007bff"
|
||||
default_image = "/assets/images/og-logo.png"
|
||||
logo = "/assets/images/logo.png"
|
||||
|
||||
# Analytics
|
||||
google_analytics = "G-XXXXXXXXXX"
|
||||
google_tag_manager = "GTM-XXXXXXX"
|
||||
|
||||
# Social Media
|
||||
[params.seo.twitter]
|
||||
site = "@mistergeekfrance"
|
||||
creator = "@mistergeekfrance"
|
||||
|
||||
# Facebook
|
||||
facebook_page = "mistergeek.fr"
|
||||
youtube_channel = "UCXXXXXXXXXXXXXXXXXXX"
|
||||
|
||||
# Search Engine Verification
|
||||
# google_verification = "your-google-verification-code"
|
||||
# bing_verification = "your-bing-verification-code"
|
||||
# yandex_verification = "your-yandex-verification-code"
|
||||
|
||||
# Geo Location (if applicable)
|
||||
# [params.seo.geo]
|
||||
# region = "FR-IDF"
|
||||
# placename = "Paris"
|
||||
# latitude = "48.8566"
|
||||
# longitude = "2.3522"
|
||||
# Local SEO
|
||||
[params.seo.local]
|
||||
enabled = true
|
||||
country = "FR"
|
||||
language = "fr"
|
||||
region = "Île-de-France"
|
||||
city = "Paris"
|
||||
latitude = "48.8566"
|
||||
longitude = "2.3522"
|
||||
|
||||
# Rich snippets
|
||||
enable_search_box = true
|
||||
enable_sitelinks_searchbox = true
|
||||
|
||||
# Verification codes
|
||||
[params.seo.verification]
|
||||
google = "your-google-verification-code"
|
||||
bing = "your-bing-verification-code"
|
||||
yandex = "your-yandex-verification-code"
|
||||
alexa = "your-alexa-verification-code"
|
||||
pinterest = "your-pinterest-verification-code"
|
||||
norton = "your-norton-verification-code"
|
||||
|
||||
# Image optimization for SEO
|
||||
[imaging]
|
||||
quality = 75
|
||||
resampleFilter = "Lanczos"
|
||||
|
||||
[params.images]
|
||||
# Dimensions recommandées pour le SEO
|
||||
og_image = "1200x630"
|
||||
twitter_image = "1200x675"
|
||||
thumbnail = "400x300"
|
||||
hero = "1920x1080"
|
||||
|
||||
# WordPress API Configuration
|
||||
[params.wordpress]
|
||||
|
||||
34
layouts/partials/seo/head-performance.html
Normal file
34
layouts/partials/seo/head-performance.html
Normal file
@@ -0,0 +1,34 @@
|
||||
{{- /* Performance optimization for SEO */ -}}
|
||||
|
||||
<!-- DNS Prefetch and Preconnect for performance -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="dns-prefetch" href="//www.google-analytics.com">
|
||||
<link rel="dns-prefetch" href="//googletagmanager.com">
|
||||
<link rel="dns-prefetch" href="//www.googletagmanager.com">
|
||||
<link rel="dns-prefetch" href="//fonts.googleapis.com">
|
||||
<link rel="dns-prefetch" href="//fonts.gstatic.com">
|
||||
|
||||
<!-- Resource hints for common CDNs -->
|
||||
<link rel="preconnect" href="https://cdnjs.cloudflare.com">
|
||||
<link rel="preconnect" href="https://unpkg.com">
|
||||
|
||||
<!-- Prefetch critical resources -->
|
||||
<link rel="prefetch" href="/assets/css/theme.css">
|
||||
<link rel="prefetch" href="/assets/images/logo.png">
|
||||
|
||||
<!-- Preload critical fonts -->
|
||||
<link rel="preload" href="/assets/fonts/main-font.woff2" as="font" type="font/woff2" crossorigin>
|
||||
<link rel="preload" href="/assets/fonts/icon-font.woff2" as="font" type="font/woff2" crossorigin>
|
||||
|
||||
<!-- Performance meta tags -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="HandheldFriendly" content="True">
|
||||
<meta name="MobileOptimized" content="320">
|
||||
|
||||
<!-- Disable phone number detection -->
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
<meta name="format-detection" content="date=no">
|
||||
<meta name="format-detection" content="address=no">
|
||||
<meta name="format-detection" content="email=no">
|
||||
31
layouts/partials/seo/hreflang.html
Normal file
31
layouts/partials/seo/hreflang.html
Normal file
@@ -0,0 +1,31 @@
|
||||
{{- /* hreflang implementation for multilingual SEO */ -}}
|
||||
|
||||
<!-- French regional variations -->
|
||||
<link rel="alternate" hreflang="fr-fr" href="https://www.mistergeek.net{{ .RelPermalink }}" />
|
||||
<!-- <link rel="alternate" hreflang="fr-be" href="https://www.mistergeek.net/be{{ .RelPermalink }}" />
|
||||
<link rel="alternate" hreflang="fr-ca" href="https://www.mistergeek.net/ca{{ .RelPermalink }}" />
|
||||
<link rel="alternate" hreflang="fr-ch" href="https://www.mistergeek.net/ch{{ .RelPermalink }}" />
|
||||
<link rel="alternate" hreflang="fr-lu" href="https://www.mistergeek.net/lu{{ .RelPermalink }}" /> -->
|
||||
|
||||
<!-- Default fallback -->
|
||||
<link rel="alternate" hreflang="x-default" href="https://www.mistergeek.net{{ .RelPermalink }}" />
|
||||
|
||||
<!-- English version if exists -->
|
||||
{{ range .Translations }}
|
||||
{{ if eq .Language.Lang "en" }}
|
||||
<link rel="alternate" hreflang="en" href="{{ .Permalink }}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Other translations -->
|
||||
{{ range .Translations }}
|
||||
{{ if ne .Language.Lang "en" }}
|
||||
<link rel="alternate" hreflang="{{ .Language.Lang }}" href="{{ .Permalink }}" />
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Canonical URL -->
|
||||
<link rel="canonical" href="{{ .Permalink }}">
|
||||
|
||||
<!-- Mobile alternate -->
|
||||
<link rel="alternate" media="only screen and (max-width: 640px)" href="{{ .Permalink }}">
|
||||
84
layouts/partials/seo/meta-dynamic.html
Normal file
84
layouts/partials/seo/meta-dynamic.html
Normal file
@@ -0,0 +1,84 @@
|
||||
{{- /* Dynamic meta tags based on content type */ -}}
|
||||
|
||||
{{- $description := "" -}}
|
||||
{{- $keywords := "" -}}
|
||||
{{- $title := .Title | default .Site.Title -}}
|
||||
|
||||
{{/* Dynamic description based on section */}}
|
||||
{{- if eq .Section "tutorials" -}}
|
||||
{{- $description = printf "Complete tutorial: %s. Learn %s in French with our step-by-step guide. %s"
|
||||
.Title
|
||||
(.Params.skill | default "the technology")
|
||||
(.Params.summary | default "") -}}
|
||||
{{- $keywords = printf "tutorial %s, french guide %s, %s, tutoriel informatique, guide technologie"
|
||||
(.Params.category | default "")
|
||||
(.Params.skill | default "")
|
||||
(.Title | lower) -}}
|
||||
|
||||
{{- else if eq .Section "comparisons" -}}
|
||||
{{- $description = printf "Detailed comparison: %s. %s Which to choose in 2024? Complete reviews and tests."
|
||||
.Title
|
||||
(.Params.summary | default "") -}}
|
||||
{{- $keywords = printf "comparison %s, best %s 2024, review %s, comparatif %s"
|
||||
(.Params.category | default "")
|
||||
(.Params.category | default "")
|
||||
(.Title | lower)
|
||||
(.Params.category | default "") -}}
|
||||
|
||||
{{- else if eq .Section "security" -}}
|
||||
{{- $description = printf "Computer security guide: %s. %s Learn to protect your data and systems effectively."
|
||||
.Title
|
||||
(.Params.summary | default "") -}}
|
||||
{{- $keywords = printf "security %s, cybersecurity %s, protection %s, sécurité informatique"
|
||||
(.Params.category | default "")
|
||||
(.Title | lower)
|
||||
(.Params.category | default "") -}}
|
||||
|
||||
{{- else if eq .Section "wordpress" -}}
|
||||
{{- $description = printf "WordPress tutorial: %s. %s Complete guide to create and manage your WordPress site in French."
|
||||
.Title
|
||||
(.Params.summary | default "") -}}
|
||||
{{- $keywords = printf "wordpress %s, tutorial wordpress %s, guide wordpress %s, créer site wordpress"
|
||||
(.Params.category | default "")
|
||||
(.Params.category | default "")
|
||||
(.Title | lower) -}}
|
||||
|
||||
{{- else -}}
|
||||
{{- $description = .Description | default .Summary | default .Site.Params.description | default .Site.Title -}}
|
||||
{{- $keywords = delimit (.Keywords | default .Site.Params.keywords | default (slice)) ", " -}}
|
||||
{{- end -}}
|
||||
|
||||
<!-- Dynamic meta tags -->
|
||||
<meta name="description" content="{{ $description | truncate 160 }}">
|
||||
<meta name="keywords" content="{{ $keywords | lower }}">
|
||||
|
||||
<!-- Content-type specific meta tags -->
|
||||
{{- if eq .Section "tutorials" }}
|
||||
<meta name="tutorial-type" content="{{ .Params.type | default "guide" }}">
|
||||
<meta name="skill-level" content="{{ .Params.level | default "beginner" }}">
|
||||
<meta name="estimated-time" content="{{ .Params.duration | default "30 min" }}">
|
||||
{{- end }}
|
||||
|
||||
{{- if eq .Section "comparisons" }}
|
||||
<meta name="comparison-year" content="2024">
|
||||
<meta name="review-type" content="detailed">
|
||||
{{- end }}
|
||||
|
||||
<!-- Article published/modified dates -->
|
||||
{{- if .IsPage }}
|
||||
<meta name="article:published_time" content="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
|
||||
<meta name="article:modified_time" content="{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}">
|
||||
{{- end }}
|
||||
|
||||
<!-- Author information -->
|
||||
{{- $author := .Params.author | default .Site.Params.author | default .Site.Title }}
|
||||
<meta name="article:author" content="{{ $author }}">
|
||||
<meta name="author" content="{{ $author }}">
|
||||
|
||||
<!-- Category and tags -->
|
||||
{{- if .Params.category }}
|
||||
<meta name="article:section" content="{{ .Params.category }}">
|
||||
{{- end }}
|
||||
{{- range .Params.tags }}
|
||||
<meta name="article:tag" content="{{ . }}">
|
||||
{{- end }}
|
||||
57
layouts/partials/seo/schema-article.html
Normal file
57
layouts/partials/seo/schema-article.html
Normal file
@@ -0,0 +1,57 @@
|
||||
{{- /* Advanced Article Schema with enhanced metadata */ -}}
|
||||
|
||||
{{- $title := .Title | default .Site.Title -}}
|
||||
{{- $description := .Description | default .Summary | default .Site.Params.description | default .Site.Title -}}
|
||||
{{- $image := .Params.image | default .Site.Params.seo.default_image | default "/assets/images/logo.png" -}}
|
||||
{{- $image = $image | absURL -}}
|
||||
{{- $url := .Permalink | default .RelPermalink | absURL -}}
|
||||
{{- $author := .Params.author | default .Site.Params.author | default .Site.Title -}}
|
||||
{{- $datePublished := .Date.Format "2006-01-02T15:04:05Z07:00" -}}
|
||||
{{- $dateModified := .Lastmod.Format "2006-01-02T15:04:05Z07:00" -}}
|
||||
{{- $keywords := delimit (.Keywords | default .Site.Params.keywords | default (slice)) ", " -}}
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": ["TechArticle", "Article"],
|
||||
"headline": "{{ $title }}",
|
||||
"description": "{{ $description }}",
|
||||
"image": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ $image }}",
|
||||
"width": 1200,
|
||||
"height": 630
|
||||
},
|
||||
"url": "{{ $url }}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{{ $author }}",
|
||||
"url": "{{ .Site.BaseURL }}",
|
||||
"sameAs": [
|
||||
"https://twitter.com/mistergeekfrance",
|
||||
"https://www.linkedin.com/in/mistergeek",
|
||||
"https://www.youtube.com/@mistergeek"
|
||||
]
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{{ .Site.Title }}",
|
||||
"url": "{{ .Site.BaseURL }}",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ .Site.BaseURL }}assets/images/logo.png"
|
||||
}
|
||||
},
|
||||
"datePublished": "{{ $datePublished }}",
|
||||
"dateModified": "{{ $dateModified }}",
|
||||
"inLanguage": "fr-FR",
|
||||
"keywords": "{{ $keywords }}",
|
||||
"articleSection": "{{ .Section | default "general" }}",
|
||||
"wordCount": {{ .WordCount }},
|
||||
"articleBody": "{{ .Plain | truncate 200 }}",
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id": "{{ $url }}"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
126
layouts/partials/seo/schema-local.html
Normal file
126
layouts/partials/seo/schema-local.html
Normal file
@@ -0,0 +1,126 @@
|
||||
{{- /* Local SEO Schema.org markup for French market */ -}}
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "Mistergeek",
|
||||
"url": "https://www.mistergeek.net",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "https://www.mistergeek.net/assets/images/logo.png",
|
||||
"width": 400,
|
||||
"height": 400
|
||||
},
|
||||
"description": "Mistergeek - Tutoriels et guides en informatique et technologie",
|
||||
"founder": {
|
||||
"@type": "Person",
|
||||
"name": "Mistergeek",
|
||||
"url": "https://www.mistergeek.net"
|
||||
},
|
||||
"foundingDate": "2020",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"addressCountry": "FR",
|
||||
"addressRegion": "Île-de-France",
|
||||
"addressLocality": "Paris",
|
||||
"postalCode": "75000"
|
||||
},
|
||||
"contactPoint": {
|
||||
"@type": "ContactPoint",
|
||||
"contactType": "support",
|
||||
"email": "contact@mistergeek.net",
|
||||
"availableLanguage": ["French"],
|
||||
"areaServed": ["FR", "BE", "CA", "CH", "LU"],
|
||||
"hoursAvailable": {
|
||||
"@type": "OpeningHoursSpecification",
|
||||
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
||||
"opens": "09:00",
|
||||
"closes": "18:00"
|
||||
}
|
||||
},
|
||||
"sameAs": [
|
||||
"https://twitter.com/mistergeekfrance",
|
||||
"https://www.linkedin.com/in/mistergeek",
|
||||
"https://www.youtube.com/@mistergeek",
|
||||
"https://github.com/mistergeek",
|
||||
"https://www.facebook.com/mistergeek.fr"
|
||||
],
|
||||
"hasOfferCatalog": {
|
||||
"@type": "OfferCatalog",
|
||||
"name": "Tutoriels Informatique",
|
||||
"itemListElement": [
|
||||
{
|
||||
"@type": "Offer",
|
||||
"itemOffered": {
|
||||
"@type": "Service",
|
||||
"name": "Tutoriels WordPress",
|
||||
"description": "Guides complets pour créer et gérer un site WordPress"
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Offer",
|
||||
"itemOffered": {
|
||||
"@type": "Service",
|
||||
"name": "Tutoriels Sécurité",
|
||||
"description": "Apprenez à sécuriser vos systèmes et données"
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Offer",
|
||||
"itemOffered": {
|
||||
"@type": "Service",
|
||||
"name": "Comparatifs Logiciels",
|
||||
"description": "Analyses détaillées des meilleurs logiciels"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
"potentialAction": {
|
||||
"@type": "SearchAction",
|
||||
"target": {
|
||||
"@type": "EntryPoint",
|
||||
"urlTemplate": "https://www.mistergeek.net/search?q={search_term_string}"
|
||||
},
|
||||
"query-input": "required name=search_term_string"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Local Business Schema for Google My Business -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "EducationalOrganization",
|
||||
"name": "Mistergeek Academy",
|
||||
"url": "https://www.mistergeek.net",
|
||||
"logo": "https://www.mistergeek.net/assets/images/logo.png",
|
||||
"description": "Formation et tutoriels en informatique et technologie",
|
||||
"address": {
|
||||
"@type": "PostalAddress",
|
||||
"streetAddress": "123 Rue de l'Informatique",
|
||||
"addressLocality": "Paris",
|
||||
"addressRegion": "Île-de-France",
|
||||
"postalCode": "75000",
|
||||
"addressCountry": "FR"
|
||||
},
|
||||
"geo": {
|
||||
"@type": "GeoCoordinates",
|
||||
"latitude": 48.8566,
|
||||
"longitude": 2.3522
|
||||
},
|
||||
"telephone": "+33-1-23-45-67-89",
|
||||
"email": "contact@mistergeek.net",
|
||||
"openingHoursSpecification": [
|
||||
{
|
||||
"@type": "OpeningHoursSpecification",
|
||||
"dayOfWeek": ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
|
||||
"opens": "09:00",
|
||||
"closes": "18:00"
|
||||
}
|
||||
],
|
||||
"priceRange": "€",
|
||||
"currenciesAccepted": "EUR",
|
||||
"paymentAccepted": "Cash, Credit Card, PayPal"
|
||||
}
|
||||
</script>
|
||||
87
layouts/partials/seo/schema-tutorial.html
Normal file
87
layouts/partials/seo/schema-tutorial.html
Normal file
@@ -0,0 +1,87 @@
|
||||
{{- /* Tutorial-specific Schema.org markup */ -}}
|
||||
|
||||
{{- $title := .Title | default .Site.Title -}}
|
||||
{{- $description := .Description | default .Summary | default .Site.Params.description | default .Site.Title -}}
|
||||
{{- $image := .Params.image | default .Site.Params.seo.default_image | default "/assets/images/logo.png" -}}
|
||||
{{- $image = $image | absURL -}}
|
||||
{{- $url := .Permalink | default .RelPermalink | absURL -}}
|
||||
{{- $author := .Params.author | default .Site.Params.author | default .Site.Title -}}
|
||||
{{- $duration := .Params.duration | default "PT30M" -}}
|
||||
{{- $difficulty := .Params.level | default "beginner" -}}
|
||||
{{- $category := .Params.category | default "technology" -}}
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "HowTo",
|
||||
"name": "{{ $title }}",
|
||||
"description": "{{ $description }}",
|
||||
"image": "{{ $image }}",
|
||||
"totalTime": "{{ $duration }}",
|
||||
"estimatedCost": {
|
||||
"@type": "MonetaryAmount",
|
||||
"currency": "EUR",
|
||||
"value": "0"
|
||||
},
|
||||
"tool": [
|
||||
{
|
||||
"@type": "HowToTool",
|
||||
"name": "{{ .Params.primary_tool | default "Ordinateur" }}"
|
||||
}
|
||||
{{- if .Params.tools -}}
|
||||
{{- range .Params.tools -}}
|
||||
,{
|
||||
"@type": "HowToTool",
|
||||
"name": "{{ . }}"
|
||||
}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
],
|
||||
"supply": [
|
||||
{
|
||||
"@type": "HowToSupply",
|
||||
"name": "{{ .Params.primary_supply | default "Connexion Internet" }}"
|
||||
}
|
||||
{{- if .Params.supplies -}}
|
||||
{{- range .Params.supplies -}}
|
||||
,{
|
||||
"@type": "HowToSupply",
|
||||
"name": "{{ . }}"
|
||||
}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
],
|
||||
"step": [
|
||||
{{- range $index, $step := .Params.steps -}}
|
||||
{{- if $index }},{{ end }}
|
||||
{
|
||||
"@type": "HowToStep",
|
||||
"position": {{ add $index 1 }},
|
||||
"name": "{{ $step.name }}",
|
||||
"text": "{{ $step.description | default $step.text }}",
|
||||
"url": "{{ $url }}#step-{{ add $index 1 }}",
|
||||
"image": "{{ $image }}"
|
||||
}
|
||||
{{- end -}}
|
||||
],
|
||||
"educationalLevel": "{{ $difficulty }}",
|
||||
"teaches": "{{ .Params.skill | default "compétences informatiques" }}",
|
||||
"inLanguage": "fr-FR",
|
||||
"audience": {
|
||||
"@type": "EducationalAudience",
|
||||
"educationalRole": "learner"
|
||||
},
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{{ $author }}",
|
||||
"url": "{{ .Site.BaseURL }}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{{ .Site.Title }}",
|
||||
"url": "{{ .Site.BaseURL }}"
|
||||
},
|
||||
"datePublished": "{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}",
|
||||
"dateModified": "{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}"
|
||||
}
|
||||
</script>
|
||||
@@ -1,9 +1,15 @@
|
||||
{{- /* SEO Configuration Partial */ -}}
|
||||
{{- /* This partial includes all SEO-related partials */ -}}
|
||||
|
||||
<!-- Performance optimizations -->
|
||||
{{ partial "seo/head-performance.html" . }}
|
||||
|
||||
<!-- Core SEO Meta Tags -->
|
||||
{{ partial "seo/seo-meta.html" . }}
|
||||
|
||||
<!-- Dynamic meta tags based on content type -->
|
||||
{{ partial "seo/meta-dynamic.html" . }}
|
||||
|
||||
<!-- Open Graph Tags -->
|
||||
{{ partial "seo/opengraph.html" . }}
|
||||
|
||||
@@ -16,6 +22,9 @@
|
||||
<!-- Favicons and PWA Support -->
|
||||
{{ partial "seo/favicons.html" . }}
|
||||
|
||||
<!-- hreflang for multilingual sites -->
|
||||
{{ partial "seo/hreflang.html" . }}
|
||||
|
||||
<!-- Additional SEO Tags -->
|
||||
{{- if .Site.Params.seo.google_verification }}
|
||||
<meta name="google-site-verification" content="{{ .Site.Params.seo.google_verification }}">
|
||||
@@ -33,10 +42,30 @@
|
||||
<meta name="alexaVerifyID" content="{{ .Site.Params.seo.alexa_verification }}">
|
||||
{{ end }}
|
||||
|
||||
<!-- hreflang for multilingual sites -->
|
||||
{{ range .Translations }}
|
||||
<link rel="alternate" hreflang="{{ .Language.Lang }}" href="{{ .Permalink }}">
|
||||
<!-- Analytics and Tracking -->
|
||||
{{- if .Site.Params.seo.google_analytics }}
|
||||
<!-- Google Analytics 4 -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ .Site.Params.seo.google_analytics }}"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
gtag('config', '{{ .Site.Params.seo.google_analytics }}');
|
||||
</script>
|
||||
{{ end }}
|
||||
{{ if .IsTranslated }}
|
||||
<link rel="alternate" hreflang="x-default" href="{{ .Permalink }}">
|
||||
|
||||
{{- if .Site.Params.seo.google_tag_manager }}
|
||||
<!-- Google Tag Manager -->
|
||||
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','{{ .Site.Params.seo.google_tag_manager }}');</script>
|
||||
{{ end }}
|
||||
|
||||
<!-- Additional verification codes -->
|
||||
{{- range $name, $code := .Site.Params.seo.verification }}
|
||||
{{- if $code }}
|
||||
<meta name="{{ $name }}" content="{{ $code }}">
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
@@ -5,46 +5,103 @@
|
||||
{{- $url := .Permalink | default .RelPermalink | absURL -}}
|
||||
{{- $siteName := .Site.Title -}}
|
||||
{{- $logo := .Site.Params.seo.logo | default "/assets/images/logo.png" | absURL -}}
|
||||
{{- $author := .Params.author | default .Site.Params.author | default .Site.Title -}}
|
||||
{{- $datePublished := .Date.Format "2006-01-02T15:04:05Z07:00" -}}
|
||||
{{- $dateModified := .Lastmod.Format "2006-01-02T15:04:05Z07:00" -}}
|
||||
{{- $keywords := delimit (.Keywords | default .Site.Params.keywords | default (slice)) ", " -}}
|
||||
|
||||
<!-- Enhanced WebSite Schema -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "{{ $siteName }}",
|
||||
"description": "{{ $description }}",
|
||||
"description": "{{ .Site.Params.description }}",
|
||||
"url": "{{ .Site.BaseURL }}",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ $logo }}"
|
||||
}
|
||||
"url": "{{ $logo }}",
|
||||
"width": 400,
|
||||
"height": 400
|
||||
},
|
||||
"potentialAction": {
|
||||
"@type": "SearchAction",
|
||||
"target": {
|
||||
"@type": "EntryPoint",
|
||||
"urlTemplate": "{{ .Site.BaseURL }}search?q={search_term_string}"
|
||||
},
|
||||
"query-input": "required name=search_term_string"
|
||||
},
|
||||
"inLanguage": "fr-FR",
|
||||
"dateModified": "{{ now.Format "2006-01-02T15:04:05Z07:00" }}"
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Enhanced Article Schema -->
|
||||
{{ if .IsPage }}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
"@type": ["Article", "TechArticle"],
|
||||
"headline": "{{ $title }}",
|
||||
"description": "{{ $description }}",
|
||||
"image": "{{ $image }}",
|
||||
"image": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ $image }}",
|
||||
"width": 1200,
|
||||
"height": 630
|
||||
},
|
||||
"url": "{{ $url }}",
|
||||
"author": {
|
||||
"@type": "Person",
|
||||
"name": "{{ .Params.author | default .Site.Params.author | default .Site.Title }}"
|
||||
"name": "{{ $author }}",
|
||||
"url": "{{ .Site.BaseURL }}",
|
||||
"sameAs": [
|
||||
"https://twitter.com/mistergeekfrance",
|
||||
"https://www.linkedin.com/in/mistergeek",
|
||||
"https://www.youtube.com/@mistergeek"
|
||||
]
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "{{ $siteName }}",
|
||||
"url": "{{ .Site.BaseURL }}",
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ $logo }}"
|
||||
"url": "{{ $logo }}",
|
||||
"width": 400,
|
||||
"height": 400
|
||||
}
|
||||
},
|
||||
"datePublished": "{{ $datePublished }}",
|
||||
"dateModified": "{{ $dateModified }}",
|
||||
"inLanguage": "fr-FR",
|
||||
"keywords": "{{ $keywords }}",
|
||||
"articleSection": "{{ .Section | default "general" }}",
|
||||
"wordCount": {{ .WordCount }},
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id": "{{ $url }}"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{{ end }}
|
||||
|
||||
<!-- Tutorial-specific Schema -->
|
||||
{{ if eq .Section "tutorials" }}
|
||||
{{ partial "seo/schema-tutorial.html" . }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Enhanced Article Schema for blog posts -->
|
||||
{{ if or (eq .Section "blog") (eq .Section "posts") }}
|
||||
{{ partial "seo/schema-article.html" . }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Local SEO Schema -->
|
||||
{{ if .IsHome }}
|
||||
{{ partial "seo/schema-local.html" . }}
|
||||
{{ end }}
|
||||
|
||||
<!-- Breadcrumb Schema -->
|
||||
{{ if and .IsPage .Section }}
|
||||
<script type="application/ld+json">
|
||||
@@ -57,28 +114,19 @@
|
||||
"position": 1,
|
||||
"name": "Accueil",
|
||||
"item": "{{ .Site.BaseURL }}"
|
||||
}
|
||||
{{ if .Section }}
|
||||
,{
|
||||
}{{ if .Section }},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 2,
|
||||
"name": "{{ .Section | humanize }}",
|
||||
"item": "{{ .Site.BaseURL }}{{ .Section }}/"
|
||||
}
|
||||
,{
|
||||
}{{ if .Title }},
|
||||
{
|
||||
"@type": "ListItem",
|
||||
"position": 3,
|
||||
"name": "{{ $title }}",
|
||||
"item": "{{ $url }}"
|
||||
}
|
||||
{{ else }}
|
||||
,{
|
||||
"@type": "ListItem",
|
||||
"position": 2,
|
||||
"name": "{{ $title }}",
|
||||
"item": "{{ $url }}"
|
||||
}
|
||||
{{ end }}
|
||||
}{{ end }}{{ end }}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user