Skip to content

Commit 443fab5

Browse files
SEO: rewrite titles + meta for top blog posts to match search demand
- Provably-fair post: front-load 'provably fair crash casino / aviator / plinko' and a 'verify it isn't rigged' angle (top GSC queries) - 3D FPS post: 'Build a 3D FPS Game in the Browser with Three.js & TypeScript' (matches 'three.js fps / three.js fps tutorial') - Update OG, Twitter-fallback, JSON-LD headline/description/keywords + blog index cards
1 parent 4e97d12 commit 443fab5

3 files changed

Lines changed: 19 additions & 19 deletions

File tree

blog/3d-fps-game-in-the-browser/index.html

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
<head>
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>Building a 3D FPS that runs in the browser with Three.js | Tapiwa Makandigona</title>
7-
<meta name="description" content="How I built a 60 FPS first-person shooter in the browser with Three.js and TypeScript — no Unity, no Unreal. Hitscan raycasting, wave-based zombies, object pooling and touch controls." />
6+
<title>Build a 3D FPS Game in the Browser with Three.js &amp; TypeScript | Tapiwa Makandigona</title>
7+
<meta name="description" content="A step-by-step look at how I built a 60 FPS first-person shooter in the browser with Three.js and TypeScript — no Unity, no Unreal. Hitscan raycasting, wave spawning, object pooling and mobile controls." />
88
<meta name="author" content="Tapiwa Makandigona" />
9-
<meta name="keywords" content="build a 3D game in the browser, Three.js FPS, WebGL first person shooter, browser game TypeScript, hitscan raycasting Three.js" />
9+
<meta name="keywords" content="three.js fps, three.js fps tutorial, build a 3D game in the browser, webgl first person shooter, browser game TypeScript, hitscan raycasting three.js" />
1010
<meta name="robots" content="index, follow, max-image-preview:large" />
1111
<link rel="canonical" href="https://tapiwa.me/blog/3d-fps-game-in-the-browser/" />
1212

1313
<meta property="og:type" content="article" />
1414
<meta property="og:site_name" content="Tapiwa Makandigona" />
15-
<meta property="og:title" content="Building a 3D FPS that runs in the browser with Three.js" />
15+
<meta property="og:title" content="Build a 3D FPS Game in the Browser with Three.js &amp; TypeScript" />
1616
<meta property="og:description" content="A custom WebGL game engine in TypeScript: hitscan raycasting, wave spawning, object pooling and 60 FPS." />
1717
<meta property="og:url" content="https://tapiwa.me/blog/3d-fps-game-in-the-browser/" />
1818
<meta property="og:image" content="https://tapiwa.me/og-image.png" />
@@ -31,14 +31,14 @@
3131
{
3232
"@context": "https://schema.org",
3333
"@type": "BlogPosting",
34-
"headline": "Building a 3D FPS that runs in the browser with Three.js",
35-
"description": "How I built a 60 FPS first-person shooter in the browser with Three.js and TypeScript — no Unity, no Unreal.",
34+
"headline": "Build a 3D FPS Game in the Browser with Three.js & TypeScript",
35+
"description": "A step-by-step look at how I built a 60 FPS first-person shooter in the browser with Three.js and TypeScript — no Unity, no Unreal. Hitscan raycasting, wave spawning and object pooling.",
3636
"image": "https://tapiwa.me/og-image.png",
3737
"datePublished": "2026-05-31",
3838
"dateModified": "2026-05-31",
3939
"inLanguage": "en",
4040
"wordCount": 1250,
41-
"keywords": "build a 3D game in the browser, Three.js FPS, WebGL first person shooter, TypeScript game",
41+
"keywords": "three.js fps, three.js fps tutorial, build a 3D game in the browser, webgl first person shooter, TypeScript game",
4242
"author": { "@type": "Person", "name": "Tapiwa Makandigona", "url": "https://tapiwa.me/" },
4343
"publisher": { "@type": "Person", "name": "Tapiwa Makandigona", "url": "https://tapiwa.me/" },
4444
"mainEntityOfPage": { "@type": "WebPage", "@id": "https://tapiwa.me/blog/3d-fps-game-in-the-browser/" },

blog/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@
3434
"author": { "@type": "Person", "name": "Tapiwa Makandigona", "url": "https://tapiwa.me/" },
3535
"blogPost": [
3636
{ "@type": "BlogPosting", "headline": "How I built a ride-hailing app without a Google Maps API key", "url": "https://tapiwa.me/blog/building-a-ride-hailing-app/" },
37-
{ "@type": "BlogPosting", "headline": "Building a 3D FPS that runs in the browser with Three.js", "url": "https://tapiwa.me/blog/3d-fps-game-in-the-browser/" },
38-
{ "@type": "BlogPosting", "headline": "How provably-fair casino games actually work", "url": "https://tapiwa.me/blog/provably-fair-casino-games/" },
37+
{ "@type": "BlogPosting", "headline": "Build a 3D FPS Game in the Browser with Three.js & TypeScript", "url": "https://tapiwa.me/blog/3d-fps-game-in-the-browser/" },
38+
{ "@type": "BlogPosting", "headline": "How Provably-Fair Casino Games Work (Aviator, Crash & Plinko)", "url": "https://tapiwa.me/blog/provably-fair-casino-games/" },
3939
{ "@type": "BlogPosting", "headline": "Sending files between phone and PC with no internet", "url": "https://tapiwa.me/blog/send-files-without-internet/" },
4040
{ "@type": "BlogPosting", "headline": "Building a banking app with React and Supabase Row Level Security", "url": "https://tapiwa.me/blog/banking-app-with-supabase/" },
4141
{ "@type": "BlogPosting", "headline": "Building a zero-dependency React component library in TypeScript", "url": "https://tapiwa.me/blog/zero-dependency-react-component-library/" }
@@ -87,13 +87,13 @@ <h2 class="section-label">All posts</h2>
8787

8888
<a class="blog-entry" href="/blog/3d-fps-game-in-the-browser/">
8989
<div class="be-meta">Game dev · WebGL</div>
90-
<div class="be-title">Building a 3D FPS that runs in the browser with Three.js</div>
90+
<div class="be-title">Build a 3D FPS Game in the Browser with Three.js &amp; TypeScript</div>
9191
<p class="be-excerpt">No Unity, no Unreal — a custom WebGL game engine in TypeScript: hitscan raycasting, wave spawning, object pooling and 60 FPS on a laptop.</p>
9292
</a>
9393

9494
<a class="blog-entry" href="/blog/provably-fair-casino-games/">
9595
<div class="be-meta">Real-time · Fairness</div>
96-
<div class="be-title">How provably-fair casino games actually work</div>
96+
<div class="be-title">How Provably-Fair Casino Games Work (Aviator, Crash &amp; Plinko)</div>
9797
<p class="be-excerpt">Aviator, Plinko, Mines and Dice — the server-seed / client-seed / nonce scheme that lets a player verify every round wasn't rigged.</p>
9898
</a>
9999

blog/provably-fair-casino-games/index.html

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@
33
<head>
44
<meta charset="UTF-8" />
55
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
6-
<title>How provably-fair casino games actually work | Tapiwa Makandigona</title>
7-
<meta name="description" content="A plain-English explanation of provably-fair gaming — the server-seed, client-seed and nonce scheme that lets a player verify an Aviator, Plinko, Mines or Dice round wasn't rigged. From building ZimBet." />
6+
<title>How Provably-Fair Casino Games Work (Aviator, Crash &amp; Plinko) | Tapiwa Makandigona</title>
7+
<meta name="description" content="Can you trust Aviator, Crash, Plinko or Dice? A plain-English guide to how provably-fair gaming works — and how to verify any round wasn't rigged using the server-seed, client-seed and nonce scheme. From building ZimBet." />
88
<meta name="author" content="Tapiwa Makandigona" />
9-
<meta name="keywords" content="how provably fair works, provably fair algorithm, Aviator game how it works, Plinko game React, server seed client seed nonce" />
9+
<meta name="keywords" content="provably fair crash casino, how to win provably fair, provably fair hack, plinko provably fair, provably fair aviator, provably fair slot machines, how provably fair works, server seed client seed nonce" />
1010
<meta name="robots" content="index, follow, max-image-preview:large" />
1111
<link rel="canonical" href="https://tapiwa.me/blog/provably-fair-casino-games/" />
1212

1313
<meta property="og:type" content="article" />
1414
<meta property="og:site_name" content="Tapiwa Makandigona" />
15-
<meta property="og:title" content="How provably-fair casino games actually work" />
16-
<meta property="og:description" content="The server-seed / client-seed / nonce scheme that lets a player verify every round wasn't rigged." />
15+
<meta property="og:title" content="How Provably-Fair Casino Games Work (Aviator, Crash &amp; Plinko)" />
16+
<meta property="og:description" content="Can you trust Aviator, Crash or Plinko? How provably-fair gaming works — and how to verify any round wasn't rigged with the server-seed, client-seed and nonce." />
1717
<meta property="og:url" content="https://tapiwa.me/blog/provably-fair-casino-games/" />
1818
<meta property="og:image" content="https://tapiwa.me/og-image.png" />
1919
<meta name="twitter:card" content="summary_large_image" />
@@ -31,14 +31,14 @@
3131
{
3232
"@context": "https://schema.org",
3333
"@type": "BlogPosting",
34-
"headline": "How provably-fair casino games actually work",
35-
"description": "A plain-English explanation of provably-fair gaming: the server-seed, client-seed and nonce scheme that lets a player verify a round wasn't rigged.",
34+
"headline": "How Provably-Fair Casino Games Work (Aviator, Crash & Plinko)",
35+
"description": "Can you trust Aviator, Crash, Plinko or Dice? A plain-English guide to how provably-fair gaming works and how to verify any round wasn't rigged using the server-seed, client-seed and nonce scheme.",
3636
"image": "https://tapiwa.me/og-image.png",
3737
"datePublished": "2026-05-31",
3838
"dateModified": "2026-05-31",
3939
"inLanguage": "en",
4040
"wordCount": 1300,
41-
"keywords": "how provably fair works, provably fair algorithm, server seed client seed nonce, Aviator, Plinko",
41+
"keywords": "provably fair crash casino, how to win provably fair, provably fair hack, plinko provably fair, provably fair aviator, how provably fair works, server seed client seed nonce",
4242
"author": { "@type": "Person", "name": "Tapiwa Makandigona", "url": "https://tapiwa.me/" },
4343
"publisher": { "@type": "Person", "name": "Tapiwa Makandigona", "url": "https://tapiwa.me/" },
4444
"mainEntityOfPage": { "@type": "WebPage", "@id": "https://tapiwa.me/blog/provably-fair-casino-games/" },

0 commit comments

Comments
 (0)