Skip to content

Commit 62d023d

Browse files
elianivamrubens
andauthored
feat(web): fill missing SEO-related values (#7096)
Co-authored-by: Matt Rubens <[email protected]>
1 parent 1ee9e01 commit 62d023d

File tree

7 files changed

+239
-24
lines changed

7 files changed

+239
-24
lines changed

apps/web-roo-code/src/app/enterprise/page.tsx

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,54 @@ import { AnimatedText } from "@/components/animated-text"
55
import { AnimatedBackground } from "@/components/homepage"
66
import { ContactForm } from "@/components/enterprise/contact-form"
77
import { EXTERNAL_LINKS } from "@/lib/constants"
8+
import type { Metadata } from "next"
9+
import { SEO } from "@/lib/seo"
10+
11+
const TITLE = "Enterprise Solution"
12+
const DESCRIPTION =
13+
"The control-plane for AI-powered software development. Gain visibility, governance, and control over your AI coding initiatives."
14+
const PATH = "/enterprise"
15+
const OG_IMAGE = SEO.ogImage
16+
17+
export const metadata: Metadata = {
18+
title: TITLE,
19+
description: DESCRIPTION,
20+
alternates: {
21+
canonical: `${SEO.url}${PATH}`,
22+
},
23+
openGraph: {
24+
title: TITLE,
25+
description: DESCRIPTION,
26+
url: `${SEO.url}${PATH}`,
27+
siteName: SEO.name,
28+
images: [
29+
{
30+
url: OG_IMAGE.url,
31+
width: OG_IMAGE.width,
32+
height: OG_IMAGE.height,
33+
alt: OG_IMAGE.alt,
34+
},
35+
],
36+
locale: SEO.locale,
37+
type: "website",
38+
},
39+
twitter: {
40+
card: SEO.twitterCard,
41+
title: TITLE,
42+
description: DESCRIPTION,
43+
images: [OG_IMAGE.url],
44+
},
45+
keywords: [
46+
...SEO.keywords,
47+
"Enterprise AI",
48+
"AI governance",
49+
"AI control-plane",
50+
"developer productivity",
51+
"SAML",
52+
"SCIM",
53+
"cost management",
54+
],
55+
}
856

957
export default async function Enterprise() {
1058
return (

apps/web-roo-code/src/app/evals/page.tsx

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,45 @@
11
import type { Metadata } from "next"
22

33
import { getEvalRuns } from "@/actions/evals"
4+
import { SEO } from "@/lib/seo"
45

56
import { Evals } from "./evals"
67

78
export const revalidate = 300
89
export const dynamic = "force-dynamic"
910

11+
const TITLE = "Evals"
12+
const DESCRIPTION = "Explore quantitative evals of LLM coding skills across tasks and providers."
13+
const PATH = "/evals"
14+
const IMAGE = {
15+
url: "https://i.imgur.com/ijP7aZm.png",
16+
width: 1954,
17+
height: 1088,
18+
alt: "Roo Code Evals – LLM coding benchmarks",
19+
}
20+
1021
export const metadata: Metadata = {
11-
title: "Roo Code Evals",
22+
title: TITLE,
23+
description: DESCRIPTION,
24+
alternates: {
25+
canonical: `${SEO.url}${PATH}`,
26+
},
1227
openGraph: {
13-
title: "Roo Code Evals",
14-
description: "Quantitative evals of LLM coding skills.",
15-
url: "https://roocode.com/evals",
16-
siteName: "Roo Code",
17-
images: {
18-
url: "https://i.imgur.com/ijP7aZm.png",
19-
width: 1954,
20-
height: 1088,
21-
},
28+
title: TITLE,
29+
description: DESCRIPTION,
30+
url: `${SEO.url}${PATH}`,
31+
siteName: SEO.name,
32+
images: [IMAGE],
33+
locale: SEO.locale,
34+
type: "website",
35+
},
36+
twitter: {
37+
card: SEO.twitterCard,
38+
title: TITLE,
39+
description: DESCRIPTION,
40+
images: [IMAGE.url],
2241
},
42+
keywords: [...SEO.keywords, "benchmarks", "LLM evals", "coding evaluations", "model comparison"],
2343
}
2444

2545
export default async function Page() {

apps/web-roo-code/src/app/layout.tsx

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import React from "react"
22
import type { Metadata } from "next"
33
import { Inter } from "next/font/google"
44
import Script from "next/script"
5+
import { SEO } from "@/lib/seo"
56

67
import { Providers } from "@/components/providers"
78

@@ -12,11 +13,14 @@ import "./globals.css"
1213
const inter = Inter({ subsets: ["latin"] })
1314

1415
export const metadata: Metadata = {
15-
title: "Roo Code – Your AI-Powered Dev Team in VS Code",
16-
description:
17-
"Roo Code puts an entire AI dev team right in your editor, outpacing closed tools with deep project-wide context, multi-step agentic coding, and unmatched developer-centric flexibility.",
16+
metadataBase: new URL(SEO.url),
17+
title: {
18+
template: "%s | Roo Code",
19+
default: SEO.title,
20+
},
21+
description: SEO.description,
1822
alternates: {
19-
canonical: "https://roocode.com",
23+
canonical: SEO.url,
2024
},
2125
icons: {
2226
icon: [
@@ -40,6 +44,42 @@ export const metadata: Metadata = {
4044
},
4145
],
4246
},
47+
openGraph: {
48+
title: SEO.title,
49+
description: SEO.description,
50+
url: SEO.url,
51+
siteName: SEO.name,
52+
images: [
53+
{
54+
url: SEO.ogImage.url,
55+
width: SEO.ogImage.width,
56+
height: SEO.ogImage.height,
57+
alt: SEO.ogImage.alt,
58+
},
59+
],
60+
locale: SEO.locale,
61+
type: "website",
62+
},
63+
twitter: {
64+
card: SEO.twitterCard,
65+
title: SEO.title,
66+
description: SEO.description,
67+
images: [SEO.ogImage.url],
68+
},
69+
robots: {
70+
index: true,
71+
follow: true,
72+
googleBot: {
73+
index: true,
74+
follow: true,
75+
"max-snippet": -1,
76+
"max-image-preview": "large",
77+
"max-video-preview": -1,
78+
},
79+
},
80+
keywords: [...SEO.keywords],
81+
applicationName: SEO.name,
82+
category: SEO.category,
4383
}
4484

4585
export default function RootLayout({ children }: { children: React.ReactNode }) {
@@ -64,8 +104,8 @@ export default function RootLayout({ children }: { children: React.ReactNode })
64104
`}
65105
</Script>
66106
<div itemScope itemType="https://schema.org/WebSite">
67-
<link itemProp="url" href="https://roocode.com" />
68-
<meta itemProp="name" content="Roo Code" />
107+
<link itemProp="url" href={SEO.url} />
108+
<meta itemProp="name" content={SEO.name} />
69109
</div>
70110
<Providers>
71111
<Shell>{children}</Shell>

apps/web-roo-code/src/app/privacy/page.tsx

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,41 @@
1-
import { Metadata } from "next"
1+
import type { Metadata } from "next"
2+
import { SEO } from "@/lib/seo"
3+
4+
const TITLE = "Privacy Policy"
5+
const DESCRIPTION =
6+
"Privacy policy for Roo Code Cloud and marketing website. Learn how we handle your data and protect your privacy."
7+
const PATH = "/privacy"
8+
const OG_IMAGE = SEO.ogImage
29

310
export const metadata: Metadata = {
4-
title: "Privacy Policy - Roo Code",
5-
description:
6-
"Privacy policy for Roo Code Cloud and marketing website. Learn how we handle your data and protect your privacy.",
11+
title: TITLE,
12+
description: DESCRIPTION,
13+
alternates: {
14+
canonical: `${SEO.url}${PATH}`,
15+
},
16+
openGraph: {
17+
title: TITLE,
18+
description: DESCRIPTION,
19+
url: `${SEO.url}${PATH}`,
20+
siteName: SEO.name,
21+
images: [
22+
{
23+
url: OG_IMAGE.url,
24+
width: OG_IMAGE.width,
25+
height: OG_IMAGE.height,
26+
alt: OG_IMAGE.alt,
27+
},
28+
],
29+
locale: SEO.locale,
30+
type: "article",
31+
},
32+
twitter: {
33+
card: SEO.twitterCard,
34+
title: TITLE,
35+
description: DESCRIPTION,
36+
images: [OG_IMAGE.url],
37+
},
38+
keywords: [...SEO.keywords, "privacy", "data protection", "GDPR", "security"],
739
}
840

941
export default function Privacy() {

apps/web-roo-code/src/app/robots.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { MetadataRoute } from "next"
2+
import { SEO } from "@/lib/seo"
3+
4+
export default function robots(): MetadataRoute.Robots {
5+
return {
6+
rules: {
7+
userAgent: "*",
8+
allow: "/",
9+
},
10+
sitemap: `${SEO.url}/sitemap.xml`,
11+
host: SEO.url,
12+
}
13+
}

apps/web-roo-code/src/app/terms/page.tsx

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,41 @@
1-
import { Metadata } from "next"
1+
import type { Metadata } from "next"
2+
import { SEO } from "@/lib/seo"
3+
4+
const TITLE = "Terms of Service"
5+
const DESCRIPTION =
6+
"Terms of Service for Roo Code Cloud. Learn about our service terms, commercial conditions, and legal framework."
7+
const PATH = "/terms"
8+
const OG_IMAGE = SEO.ogImage
29

310
export const metadata: Metadata = {
4-
title: "Terms of Service - Roo Code",
5-
description:
6-
"Terms of Service for Roo Code Cloud. Learn about our service terms, commercial conditions, and legal framework.",
11+
title: TITLE,
12+
description: DESCRIPTION,
13+
alternates: {
14+
canonical: `${SEO.url}${PATH}`,
15+
},
16+
openGraph: {
17+
title: TITLE,
18+
description: DESCRIPTION,
19+
url: `${SEO.url}${PATH}`,
20+
siteName: SEO.name,
21+
images: [
22+
{
23+
url: OG_IMAGE.url,
24+
width: OG_IMAGE.width,
25+
height: OG_IMAGE.height,
26+
alt: OG_IMAGE.alt,
27+
},
28+
],
29+
locale: SEO.locale,
30+
type: "article",
31+
},
32+
twitter: {
33+
card: SEO.twitterCard,
34+
title: TITLE,
35+
description: DESCRIPTION,
36+
images: [OG_IMAGE.url],
37+
},
38+
keywords: [...SEO.keywords, "terms of service", "legal", "agreement", "subscription"],
739
}
840

941
export default function Terms() {

apps/web-roo-code/src/lib/seo.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? "https://roocode.com"
2+
3+
export const SEO = {
4+
url: SITE_URL,
5+
name: "Roo Code",
6+
title: "Roo Code – Your AI-Powered Dev Team in VS Code",
7+
description:
8+
"Roo Code puts an entire AI dev team right in your editor, outpacing closed tools with deep project-wide context, multi-step agentic coding, and unmatched developer-centric flexibility.",
9+
locale: "en_US",
10+
ogImage: {
11+
url: "/android-chrome-512x512.png",
12+
width: 512,
13+
height: 512,
14+
alt: "Roo Code Logo",
15+
},
16+
keywords: [
17+
"Roo Code",
18+
"AI coding agent",
19+
"VS Code extension",
20+
"AI pair programmer",
21+
"software development",
22+
"agentic coding",
23+
"code refactoring",
24+
"debugging",
25+
],
26+
category: "technology",
27+
twitterCard: "summary_large_image" as const,
28+
} as const
29+
30+
export type SeoConfig = typeof SEO

0 commit comments

Comments
 (0)