Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions src/app/join/page.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import type { Metadata } from "next";
import Footer from "@/components/Footer";
import CohortHero from "@/components/CohortHero";
import CohortHeroBanner from "@/components/CohortHeroBanner";
Expand All @@ -8,6 +9,20 @@ import CohortJoinBanner from "@/components/CohortJoinBanner";
import HeaderJoin from "@/components/HeaderJoin";
import JoinUsSection from "@/components/JoinUsSection";

export const metadata: Metadata = {
title: { absolute: "Join a RaidGuild Cohort — 4-Week Web3 Proving Ground" },
description:
"A free monthly cohort for intermediate+ developers, designers, and operators. Build a real Web3 project with experienced guild members. Paths out: paid raids, recruitment, ventures, or membership.",
alternates: { canonical: "/join" },
openGraph: {
title: "Join a RaidGuild Cohort — 4-Week Web3 Proving Ground",
description:
"A free monthly cohort for intermediate+ developers, designers, and operators. Build a real Web3 project with experienced guild members.",
url: "https://www.raidguild.org/join",
type: "website",
},
};

export default function Home() {
return (
<div className="min-h-screen bg-background">
Expand Down
24 changes: 22 additions & 2 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,28 @@ import { Providers } from "@/providers/providers";
import VercelAnalytics from "@/components/VercelAnalytics";

export const metadata: Metadata = {
title: "Raid Guild",
description: "Elite Raiders Conquering the Web3 Realm. Legendary design, development, and consulting. ",
metadataBase: new URL("https://www.raidguild.org"),
title: {
default: "RaidGuild — Web3 Design & Development Collective",
template: "%s | RaidGuild",
},
description:
"A builder-owned collective shipping smart contracts, dApps, AI systems, and DAO tooling since 2019. Clients include Gitcoin, Gnosis, Pocket Network, and Unlock Protocol.",
alternates: { canonical: "/" },

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Remove the root-level canonical URL.

Defining canonical: "/" in the root layout sets this as the default canonical URL for all pages that do not explicitly override it. This causes search engines to mistakenly treat any non-overridden pages as duplicates of the homepage.

It is recommended to remove this from the root layout and instead define it directly in the homepage's src/app/page.tsx metadata.

🕷️ Proposed fix for `layout.tsx`
-  alternates: { canonical: "/" },
🕷️ Proposed follow-up for `src/app/page.tsx`

You can apply the canonical URL explicitly to the homepage by adding this to src/app/page.tsx:

import type { Metadata } from "next";

export const metadata: Metadata = {
  alternates: { canonical: "/" },
};
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
alternates: { canonical: "/" },
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/app/layout.tsx` at line 16, Remove the root-level alternates.canonical
definition from the layout metadata so it is not inherited by other pages. Add
homepage-specific Metadata in the page module and set its alternates.canonical
to "/" there.

openGraph: {
siteName: "RaidGuild",
type: "website",
url: "https://www.raidguild.org",
title: "RaidGuild — Web3 Design & Development Collective",
description:
"A builder-owned collective shipping smart contracts, dApps, AI systems, and DAO tooling since 2019.",
},
twitter: {
card: "summary_large_image",
title: "RaidGuild — Web3 Design & Development Collective",
description:
"A builder-owned collective shipping smart contracts, dApps, AI systems, and DAO tooling since 2019.",
},
};

export default function RootLayout({
Expand Down
21 changes: 21 additions & 0 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,30 @@ import ServicesBanner from "@/components/ServicesBanner";
import MercenariesBanner from "@/components/MercenariesBanner";

export const dynamic = 'force-dynamic';

const organizationSchema = {
"@context": "https://schema.org",
"@type": "Organization",
name: "RaidGuild",
url: "https://www.raidguild.org",
logo: "https://www.raidguild.org/images/logo-RG-moloch-500.svg",
description:
"A builder-owned collective shipping smart contracts, dApps, AI systems, and DAO tooling since 2019.",
foundingDate: "2019",
sameAs: [
"https://github.com/raid-guild",
"https://x.com/RaidGuild",
"https://discord.gg/2vx47gT95y",
],
};

export default function Home() {
return (
<div className="min-h-screen bg-background">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(organizationSchema) }}
/>
<Header />

<HomeHero />
Expand Down
12 changes: 12 additions & 0 deletions src/app/robots.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import type { MetadataRoute } from "next";

export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: "*",
allow: "/",
},
sitemap: "https://www.raidguild.org/sitemap.xml",
host: "https://www.raidguild.org",
};
}
21 changes: 21 additions & 0 deletions src/app/sitemap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import type { MetadataRoute } from "next";

export default function sitemap(): MetadataRoute.Sitemap {
const base = "https://www.raidguild.org";
const lastModified = new Date();

return [
{
url: `${base}/`,
lastModified,
changeFrequency: "weekly",
priority: 1,
},
{
url: `${base}/join`,
lastModified,
changeFrequency: "weekly",
priority: 0.8,
},
];
}