Skip to content

Commit 52b6c29

Browse files
committed
site: SEO/indexability pass
- Fix homepage canonical/og:url/JSON-LD url to the trailing-slash served URL (was the no-slash variant that 301-redirects; now canonical = og:url = JSON-LD url = sitemap loc), bump softwareVersion to 2.3.1, add image + author sameAs. - Add FAQPage JSON-LD (homepage) mirroring the 6 visible Q&A verbatim, and BreadcrumbList + TechArticle/CollectionPage JSON-LD to all guide pages. - Self-host Geist (the jsdelivr CSS 404'd on every page): add @font-face + fonts/Geist-Variable.woff2, drop the 3 dead links per page. - Add favicon.ico + apple-touch-icon (favicon.ico was 404), theme-color, and complete OG (site_name/locale/image:alt) across all pages. - Add direct homepage footer links to the 3 orphaned guides; sitemap lastmod; trim homepage meta description; expand the thin guides index title/intro.
1 parent 661b4b2 commit 52b6c29

12 files changed

Lines changed: 401 additions & 42 deletions

site/apple-touch-icon.png

69.3 KB
Loading

site/css/style.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
/* ---- Self-hosted Geist (variable) ---- */
2+
@font-face {
3+
font-family: 'Geist Variable';
4+
font-style: normal;
5+
font-weight: 100 900;
6+
font-display: swap;
7+
src: url('../fonts/Geist-Variable.woff2') format('woff2');
8+
}
9+
110
/* ---- Reset & Base ---- */
211
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
312

site/favicon.ico

5.3 KB
Binary file not shown.

site/fonts/Geist-Variable.woff2

55.5 KB
Binary file not shown.

site/guides/ai-translation.html

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,69 @@
1515
<meta property="og:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
1616
<meta property="og:image:width" content="1200">
1717
<meta property="og:image:height" content="630">
18+
<meta property="og:site_name" content="Bazarr+">
19+
<meta property="og:locale" content="en_US">
20+
<meta property="og:image:alt" content="Bazarr+ subtitle management dashboard">
1821

1922
<!-- Twitter Card -->
2023
<meta name="twitter:card" content="summary_large_image">
2124
<meta name="twitter:title" content="AI Translation Setup - Bazarr+ Guides">
2225
<meta name="twitter:description" content="Set up AI-powered subtitle translation in Bazarr+ using OpenRouter language models, including free tiers.">
2326
<meta name="twitter:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
2427

25-
<!-- Geist font: async preload -->
26-
<link rel="preload" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" as="style" crossorigin>
27-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" media="print" onload="this.media='all'">
28-
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css"></noscript>
28+
<!-- Geist font: self-hosted variable font -->
29+
<link rel="preload" href="../fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin>
2930

3031
<link rel="icon" href="../screenshots/logo128.png" type="image/png">
32+
<meta name="theme-color" content="#1a1a2e">
33+
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
3134
<link rel="stylesheet" href="../css/style.css">
35+
36+
<script type="application/ld+json">
37+
{
38+
"@context": "https://schema.org",
39+
"@type": "BreadcrumbList",
40+
"itemListElement": [
41+
{
42+
"@type": "ListItem",
43+
"position": 1,
44+
"name": "Home",
45+
"item": "https://lavx.github.io/bazarr/"
46+
},
47+
{
48+
"@type": "ListItem",
49+
"position": 2,
50+
"name": "Guides",
51+
"item": "https://lavx.github.io/bazarr/guides/"
52+
},
53+
{
54+
"@type": "ListItem",
55+
"position": 3,
56+
"name": "AI Translation",
57+
"item": "https://lavx.github.io/bazarr/guides/ai-translation.html"
58+
}
59+
]
60+
}
61+
</script>
62+
<script type="application/ld+json">
63+
{
64+
"@context": "https://schema.org",
65+
"@type": "TechArticle",
66+
"headline": "AI Translation Setup",
67+
"description": "Set up AI-powered subtitle translation in Bazarr+ using OpenRouter language models, including free tiers.",
68+
"url": "https://lavx.github.io/bazarr/guides/ai-translation.html",
69+
"author": {
70+
"@type": "Person",
71+
"name": "LavX",
72+
"sameAs": "https://github.com/LavX"
73+
},
74+
"isPartOf": {
75+
"@type": "WebSite",
76+
"name": "Bazarr+",
77+
"url": "https://lavx.github.io/bazarr/"
78+
}
79+
}
80+
</script>
3281
</head>
3382
<body>
3483

site/guides/external-integration.html

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,69 @@
1515
<meta property="og:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
1616
<meta property="og:image:width" content="1200">
1717
<meta property="og:image:height" content="630">
18+
<meta property="og:site_name" content="Bazarr+">
19+
<meta property="og:locale" content="en_US">
20+
<meta property="og:image:alt" content="Bazarr+ subtitle management dashboard">
1821

1922
<!-- Twitter Card -->
2023
<meta name="twitter:card" content="summary_large_image">
2124
<meta name="twitter:title" content="External Integration (Jellyfin & VLSub) - Bazarr+ Guides">
2225
<meta name="twitter:description" content="Set up Bazarr+'s External Integration endpoint, install the Jellyfin plugin and VLSub Bazarr+ extension, and manage the API token.">
2326
<meta name="twitter:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
2427

25-
<!-- Geist font: async preload -->
26-
<link rel="preload" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" as="style" crossorigin>
27-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" media="print" onload="this.media='all'">
28-
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css"></noscript>
28+
<!-- Geist font: self-hosted variable font -->
29+
<link rel="preload" href="../fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin>
2930

3031
<link rel="icon" href="../screenshots/logo128.png" type="image/png">
32+
<meta name="theme-color" content="#1a1a2e">
33+
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
3134
<link rel="stylesheet" href="../css/style.css">
35+
36+
<script type="application/ld+json">
37+
{
38+
"@context": "https://schema.org",
39+
"@type": "BreadcrumbList",
40+
"itemListElement": [
41+
{
42+
"@type": "ListItem",
43+
"position": 1,
44+
"name": "Home",
45+
"item": "https://lavx.github.io/bazarr/"
46+
},
47+
{
48+
"@type": "ListItem",
49+
"position": 2,
50+
"name": "Guides",
51+
"item": "https://lavx.github.io/bazarr/guides/"
52+
},
53+
{
54+
"@type": "ListItem",
55+
"position": 3,
56+
"name": "External Integration",
57+
"item": "https://lavx.github.io/bazarr/guides/external-integration.html"
58+
}
59+
]
60+
}
61+
</script>
62+
<script type="application/ld+json">
63+
{
64+
"@context": "https://schema.org",
65+
"@type": "TechArticle",
66+
"headline": "External Integration (Jellyfin & VLSub)",
67+
"description": "Set up Bazarr+'s External Integration endpoint, install the Jellyfin plugin and VLSub Bazarr+ extension, and manage the API token.",
68+
"url": "https://lavx.github.io/bazarr/guides/external-integration.html",
69+
"author": {
70+
"@type": "Person",
71+
"name": "LavX",
72+
"sameAs": "https://github.com/LavX"
73+
},
74+
"isPartOf": {
75+
"@type": "WebSite",
76+
"name": "Bazarr+",
77+
"url": "https://lavx.github.io/bazarr/"
78+
}
79+
}
80+
</script>
3281
</head>
3382
<body>
3483

site/guides/getting-started.html

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,69 @@
1515
<meta property="og:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
1616
<meta property="og:image:width" content="1200">
1717
<meta property="og:image:height" content="630">
18+
<meta property="og:image:alt" content="Bazarr+ subtitle management dashboard">
19+
<meta property="og:site_name" content="Bazarr+">
20+
<meta property="og:locale" content="en_US">
1821

1922
<!-- Twitter Card -->
2023
<meta name="twitter:card" content="summary_large_image">
2124
<meta name="twitter:title" content="Getting Started - Bazarr+ Guides">
2225
<meta name="twitter:description" content="Install Bazarr+ with Docker, connect to Sonarr and Radarr, and start downloading subtitles automatically.">
2326
<meta name="twitter:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
2427

25-
<!-- Geist font: async preload -->
26-
<link rel="preload" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" as="style" crossorigin>
27-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" media="print" onload="this.media='all'">
28-
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css"></noscript>
28+
<!-- Geist font: self-hosted -->
29+
<link rel="preload" href="../fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin>
2930

3031
<link rel="icon" href="../screenshots/logo128.png" type="image/png">
32+
<meta name="theme-color" content="#1a1a2e">
33+
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
3134
<link rel="stylesheet" href="../css/style.css">
35+
36+
<script type="application/ld+json">
37+
{
38+
"@context": "https://schema.org",
39+
"@type": "BreadcrumbList",
40+
"itemListElement": [
41+
{
42+
"@type": "ListItem",
43+
"position": 1,
44+
"name": "Home",
45+
"item": "https://lavx.github.io/bazarr/"
46+
},
47+
{
48+
"@type": "ListItem",
49+
"position": 2,
50+
"name": "Guides",
51+
"item": "https://lavx.github.io/bazarr/guides/"
52+
},
53+
{
54+
"@type": "ListItem",
55+
"position": 3,
56+
"name": "Getting Started",
57+
"item": "https://lavx.github.io/bazarr/guides/getting-started.html"
58+
}
59+
]
60+
}
61+
</script>
62+
<script type="application/ld+json">
63+
{
64+
"@context": "https://schema.org",
65+
"@type": "TechArticle",
66+
"headline": "Getting Started",
67+
"description": "Install Bazarr+ with Docker, connect to Sonarr and Radarr, and start downloading subtitles automatically.",
68+
"url": "https://lavx.github.io/bazarr/guides/getting-started.html",
69+
"author": {
70+
"@type": "Person",
71+
"name": "LavX",
72+
"sameAs": "https://github.com/LavX"
73+
},
74+
"isPartOf": {
75+
"@type": "WebSite",
76+
"name": "Bazarr+",
77+
"url": "https://lavx.github.io/bazarr/"
78+
}
79+
}
80+
</script>
3281
</head>
3382
<body>
3483

site/guides/index.html

Lines changed: 44 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1">
6-
<title>Guides - Bazarr+</title>
6+
<title>Bazarr+ Guides - Install, Provider Hub, AI Translation &amp; Migration</title>
77
<meta name="description" content="Setup guides for Bazarr+. Learn how to install, use Provider Hub, configure External Integration, set up AI translation, and migrate from upstream Bazarr.">
88
<link rel="canonical" href="https://lavx.github.io/bazarr/guides/">
99

@@ -15,20 +15,58 @@
1515
<meta property="og:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
1616
<meta property="og:image:width" content="1200">
1717
<meta property="og:image:height" content="630">
18+
<meta property="og:image:alt" content="Bazarr+ subtitle management dashboard">
19+
<meta property="og:site_name" content="Bazarr+">
20+
<meta property="og:locale" content="en_US">
1821

1922
<!-- Twitter Card -->
2023
<meta name="twitter:card" content="summary_large_image">
2124
<meta name="twitter:title" content="Guides - Bazarr+">
2225
<meta name="twitter:description" content="Setup guides for Bazarr+. Learn how to install, use Provider Hub, configure External Integration, set up AI translation, and migrate from upstream Bazarr.">
2326
<meta name="twitter:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
2427

25-
<!-- Geist font: async preload -->
26-
<link rel="preload" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" as="style" crossorigin>
27-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" media="print" onload="this.media='all'">
28-
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css"></noscript>
28+
<!-- Geist font: self-hosted -->
29+
<link rel="preload" href="../fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin>
2930

3031
<link rel="icon" href="../screenshots/logo128.png" type="image/png">
32+
<meta name="theme-color" content="#1a1a2e">
33+
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
3134
<link rel="stylesheet" href="../css/style.css">
35+
36+
<script type="application/ld+json">
37+
{
38+
"@context": "https://schema.org",
39+
"@type": "BreadcrumbList",
40+
"itemListElement": [
41+
{
42+
"@type": "ListItem",
43+
"position": 1,
44+
"name": "Home",
45+
"item": "https://lavx.github.io/bazarr/"
46+
},
47+
{
48+
"@type": "ListItem",
49+
"position": 2,
50+
"name": "Guides",
51+
"item": "https://lavx.github.io/bazarr/guides/"
52+
}
53+
]
54+
}
55+
</script>
56+
<script type="application/ld+json">
57+
{
58+
"@context": "https://schema.org",
59+
"@type": "CollectionPage",
60+
"name": "Bazarr+ Guides - Install, Provider Hub, AI Translation & Migration",
61+
"description": "Setup guides for Bazarr+. Learn how to install, use Provider Hub, configure External Integration, set up AI translation, and migrate from upstream Bazarr.",
62+
"url": "https://lavx.github.io/bazarr/guides/",
63+
"isPartOf": {
64+
"@type": "WebSite",
65+
"name": "Bazarr+",
66+
"url": "https://lavx.github.io/bazarr/"
67+
}
68+
}
69+
</script>
3270
</head>
3371
<body>
3472

@@ -64,6 +102,7 @@
64102
<a href="../">Home</a><span class="sep">/</span><span>Guides</span>
65103
</nav>
66104
<h1>Guides</h1>
105+
<p class="guide-intro">Step-by-step setup guides for Bazarr+: install with Docker, add subtitle providers through Provider Hub, connect Jellyfin and VLSub over the External Integration endpoint, translate subtitles with AI, and migrate from upstream Bazarr without losing your database or config.</p>
67106

68107
<div class="guide-grid">
69108
<a href="getting-started.html" class="guide-card">

site/guides/migration.html

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,69 @@
1515
<meta property="og:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
1616
<meta property="og:image:width" content="1200">
1717
<meta property="og:image:height" content="630">
18+
<meta property="og:site_name" content="Bazarr+">
19+
<meta property="og:locale" content="en_US">
20+
<meta property="og:image:alt" content="Bazarr+ subtitle management dashboard">
1821

1922
<!-- Twitter Card -->
2023
<meta name="twitter:card" content="summary_large_image">
2124
<meta name="twitter:title" content="Migration from Upstream - Bazarr+ Guides">
2225
<meta name="twitter:description" content="Switch from upstream Bazarr to Bazarr+ in five minutes. Same database, same config, nothing lost.">
2326
<meta name="twitter:image" content="https://lavx.github.io/bazarr/screenshots/og-image.png">
2427

25-
<!-- Geist font: async preload -->
26-
<link rel="preload" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" as="style" crossorigin>
27-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css" media="print" onload="this.media='all'">
28-
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/geist@1.3.1/dist/fonts/geist-sans/style.min.css"></noscript>
28+
<!-- Geist font: self-hosted preload -->
29+
<link rel="preload" href="../fonts/Geist-Variable.woff2" as="font" type="font/woff2" crossorigin>
2930

3031
<link rel="icon" href="../screenshots/logo128.png" type="image/png">
32+
<meta name="theme-color" content="#1a1a2e">
33+
<link rel="apple-touch-icon" href="../apple-touch-icon.png">
3134
<link rel="stylesheet" href="../css/style.css">
35+
36+
<script type="application/ld+json">
37+
{
38+
"@context": "https://schema.org",
39+
"@type": "BreadcrumbList",
40+
"itemListElement": [
41+
{
42+
"@type": "ListItem",
43+
"position": 1,
44+
"name": "Home",
45+
"item": "https://lavx.github.io/bazarr/"
46+
},
47+
{
48+
"@type": "ListItem",
49+
"position": 2,
50+
"name": "Guides",
51+
"item": "https://lavx.github.io/bazarr/guides/"
52+
},
53+
{
54+
"@type": "ListItem",
55+
"position": 3,
56+
"name": "Migration from Upstream",
57+
"item": "https://lavx.github.io/bazarr/guides/migration.html"
58+
}
59+
]
60+
}
61+
</script>
62+
<script type="application/ld+json">
63+
{
64+
"@context": "https://schema.org",
65+
"@type": "TechArticle",
66+
"headline": "Migration from Upstream",
67+
"description": "Switch from upstream Bazarr to Bazarr+ in five minutes. Same database, same config, nothing lost.",
68+
"url": "https://lavx.github.io/bazarr/guides/migration.html",
69+
"author": {
70+
"@type": "Person",
71+
"name": "LavX",
72+
"sameAs": "https://github.com/LavX"
73+
},
74+
"isPartOf": {
75+
"@type": "WebSite",
76+
"name": "Bazarr+",
77+
"url": "https://lavx.github.io/bazarr/"
78+
}
79+
}
80+
</script>
3281
</head>
3382
<body>
3483

0 commit comments

Comments
 (0)