seo: add sitemap, robots.txt and optimised page titles/descriptions
- @astrojs/sitemap generates sitemap-index.xml at build time - robots.txt points crawlers to the sitemap - generators.ts extended with seoTitle and seoDescription per generator - All generator pages now use seoTitle/seoDescription for <title> and <meta description> Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
af64203e17
commit
80a39035d3
@@ -4,6 +4,8 @@ export interface Generator {
|
||||
description: string;
|
||||
icon: string;
|
||||
status: 'live' | 'coming-soon';
|
||||
seoTitle: string;
|
||||
seoDescription: string;
|
||||
}
|
||||
|
||||
export const generators: Generator[] = [
|
||||
@@ -13,6 +15,8 @@ export const generators: Generator[] = [
|
||||
description: 'Pick a random number within any range you choose.',
|
||||
icon: 'hash',
|
||||
status: 'live',
|
||||
seoTitle: 'Random Number Generator | Randify',
|
||||
seoDescription: 'Generate a random number between any two values instantly. Free online random number picker — perfect for giveaways, games, and decisions.',
|
||||
},
|
||||
{
|
||||
slug: 'colors',
|
||||
@@ -20,6 +24,8 @@ export const generators: Generator[] = [
|
||||
description: 'Generate a random color in HEX, RGB, or HSL format.',
|
||||
icon: 'palette',
|
||||
status: 'live',
|
||||
seoTitle: 'Random Color Generator — HEX, RGB, HSL | Randify',
|
||||
seoDescription: 'Get a random color in HEX, RGB or HSL format with one click. Free online color randomizer for designers and developers.',
|
||||
},
|
||||
{
|
||||
slug: 'password',
|
||||
@@ -27,6 +33,8 @@ export const generators: Generator[] = [
|
||||
description: 'Create a strong, random password with custom rules.',
|
||||
icon: 'lock',
|
||||
status: 'live',
|
||||
seoTitle: 'Random Password Generator | Randify',
|
||||
seoDescription: 'Create a strong random password with custom length, uppercase, lowercase, digits and symbols. Free and secure — runs entirely in your browser.',
|
||||
},
|
||||
{
|
||||
slug: 'lottery',
|
||||
@@ -34,6 +42,8 @@ export const generators: Generator[] = [
|
||||
description: 'Draw a set of unique numbers for lottery-style picks.',
|
||||
icon: 'ticket',
|
||||
status: 'live',
|
||||
seoTitle: 'Lottery Number Generator — Random Pick | Randify',
|
||||
seoDescription: 'Draw a set of unique random lottery numbers from any range. Perfect for lotteries, raffles, and lucky draws. Free online lottery picker.',
|
||||
},
|
||||
{
|
||||
slug: 'dice',
|
||||
@@ -41,6 +51,8 @@ export const generators: Generator[] = [
|
||||
description: 'Roll one or more dice with any number of sides.',
|
||||
icon: 'dice-6',
|
||||
status: 'live',
|
||||
seoTitle: 'Online Dice Roller — d4, d6, d20 and more | Randify',
|
||||
seoDescription: 'Roll virtual dice online. Supports d4, d6, d8, d10, d12, d20 and d100. Roll multiple dice at once — great for D&D, board games and tabletop RPGs.',
|
||||
},
|
||||
{
|
||||
slug: 'cards',
|
||||
@@ -48,6 +60,8 @@ export const generators: Generator[] = [
|
||||
description: 'Draw a random playing card from a standard deck.',
|
||||
icon: 'square-stack',
|
||||
status: 'live',
|
||||
seoTitle: 'Random Card Generator — Draw from a Deck | Randify',
|
||||
seoDescription: 'Draw random playing cards from a standard 52-card deck. Pick any number of cards, with or without replacement. Free online card picker.',
|
||||
},
|
||||
{
|
||||
slug: 'coin',
|
||||
@@ -55,6 +69,8 @@ export const generators: Generator[] = [
|
||||
description: 'Flip one or more coins and see heads or tails.',
|
||||
icon: 'circle-dollar-sign',
|
||||
status: 'live',
|
||||
seoTitle: 'Coin Flip Online — Heads or Tails | Randify',
|
||||
seoDescription: 'Flip a virtual coin online. Flip multiple coins at once and see how many heads and tails you get. Free random coin toss simulator.',
|
||||
},
|
||||
{
|
||||
slug: 'list',
|
||||
@@ -62,6 +78,8 @@ export const generators: Generator[] = [
|
||||
description: 'Paste a list of items and pick random winners.',
|
||||
icon: 'list',
|
||||
status: 'live',
|
||||
seoTitle: 'Random List Picker — Pick a Random Winner | Randify',
|
||||
seoDescription: 'Paste any list of names or items and pick random winners instantly. Great for giveaways, choosing who goes first, or any random selection.',
|
||||
},
|
||||
{
|
||||
slug: 'uuid',
|
||||
@@ -69,5 +87,7 @@ export const generators: Generator[] = [
|
||||
description: 'Generate UUIDs, hex tokens, or random base64 strings.',
|
||||
icon: 'fingerprint',
|
||||
status: 'live',
|
||||
seoTitle: 'UUID Generator — UUID v4, Hex & Base64 Tokens | Randify',
|
||||
seoDescription: 'Generate random UUID v4, hex tokens, or base64 strings online. Cryptographically secure, runs in your browser. Free UUID and token generator.',
|
||||
},
|
||||
];
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'cards')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} Generator — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'coin')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'colors')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} Generator — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'dice')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} Generator — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'list')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'lottery')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} Generator — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'numbers')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} Generator — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'password')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} Generator — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
@@ -8,8 +8,8 @@ const generator = generators.find((g) => g.slug === 'uuid')!;
|
||||
---
|
||||
|
||||
<BaseLayout
|
||||
title={`${generator.title} — Randify`}
|
||||
description={generator.description}
|
||||
title={generator.seoTitle}
|
||||
description={generator.seoDescription}
|
||||
>
|
||||
<div class="max-w-2xl mx-auto px-4 py-12 sm:py-20">
|
||||
<nav aria-label="Breadcrumb" class="mb-10">
|
||||
|
||||
Reference in New Issue
Block a user