Skip to content

Commit a6f7362

Browse files
committed
Implement comprehensive SEO enhancements and analytics
- Enhanced metadata across all pages with targeted keywords and OpenGraph - Added dynamic OpenGraph image generation using Next.js ImageResponse - Expanded sitemap with /radar and /about pages with proper priorities - Integrated Vercel Analytics for production traffic insights - Added canonical URLs and enhanced robot directives for better indexing - Improved about page metadata with expanded keywords and descriptions These improvements enhance discoverability and search engine visibility for FOSSRadar.in across all major platforms and social media.
1 parent cee2516 commit a6f7362

File tree

8 files changed

+275
-7
lines changed

8 files changed

+275
-7
lines changed

app/about/page.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,27 @@ import type { Metadata } from "next";
55

66
export const metadata: Metadata = {
77
title: "About - FOSSRadar.in",
8-
description: "Learn about FOSSRadar.in, India's comprehensive directory celebrating FOSS projects through their founders, creators, contributors, and community impact.",
9-
keywords: ["about", "foss", "open source", "india", "directory", "mission"],
8+
description: "Learn about FOSSRadar.in, India's comprehensive directory celebrating FOSS projects through their founders, creators, contributors, and community impact. Built by wbfoss for the Indian open source community.",
9+
keywords: [
10+
"about fossradar",
11+
"foss india",
12+
"open source directory",
13+
"indian developers",
14+
"wbfoss",
15+
"open source mission",
16+
"git-based directory",
17+
"community driven",
18+
"transparent platform",
19+
],
20+
openGraph: {
21+
title: "About FOSSRadar.in - India's Open Source Directory",
22+
description: "Learn about our mission to celebrate and showcase India's vibrant FOSS ecosystem through founders, creators, and contributors.",
23+
url: "https://fossradar.in/about",
24+
type: "website",
25+
},
26+
alternates: {
27+
canonical: "https://fossradar.in/about",
28+
},
1029
};
1130

1231
export default function AboutPage() {

app/layout.tsx

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type { Metadata } from "next";
22
import { ThemeProvider } from "next-themes";
33
import { VT323, Share_Tech, Inter } from "next/font/google";
4+
import { Analytics } from "@vercel/analytics/react";
45
import "./globals.css";
56

67
// Font configurations
@@ -25,14 +26,78 @@ const inter = Inter({
2526
});
2627

2728
export const metadata: Metadata = {
28-
title: "FOSSRadar.in - India's Open Source Directory",
29-
description: "Discover and explore open source projects from India",
30-
keywords: ["open source", "foss", "india", "projects", "directory", "fossradar"],
31-
authors: [{ name: "FOSSRadar.in" }],
29+
metadataBase: new URL('https://fossradar.in'),
30+
title: {
31+
default: "FOSSRadar.in - India's Open Source Directory",
32+
template: "%s | FOSSRadar.in"
33+
},
34+
description: "Discover and explore open source projects from India. FOSSRadar is a comprehensive directory celebrating FOSS projects through their founders, creators, contributors, and community impact.",
35+
keywords: [
36+
"open source",
37+
"foss",
38+
"india",
39+
"indian developers",
40+
"open source projects",
41+
"github",
42+
"directory",
43+
"fossradar",
44+
"programming",
45+
"software development",
46+
"indian tech",
47+
"developer community",
48+
"kolkata",
49+
"bangalore",
50+
"mumbai",
51+
"delhi",
52+
"hyderabad"
53+
],
54+
authors: [{ name: "FOSSRadar.in", url: "https://fossradar.in" }],
55+
creator: "wbfoss",
56+
publisher: "wbfoss",
57+
formatDetection: {
58+
email: false,
59+
address: false,
60+
telephone: false,
61+
},
3262
openGraph: {
63+
type: "website",
64+
locale: "en_IN",
65+
url: "https://fossradar.in",
66+
siteName: "FOSSRadar.in",
67+
title: "FOSSRadar.in - India's Open Source Directory",
68+
description: "Discover and explore open source projects from India. A comprehensive directory celebrating FOSS projects from Indian founders, creators, and contributors.",
69+
images: [
70+
{
71+
url: "/og-image.png",
72+
width: 1200,
73+
height: 630,
74+
alt: "FOSSRadar.in - India's Open Source Directory",
75+
},
76+
],
77+
},
78+
twitter: {
79+
card: "summary_large_image",
3380
title: "FOSSRadar.in - India's Open Source Directory",
3481
description: "Discover and explore open source projects from India",
35-
type: "website",
82+
images: ["/og-image.png"],
83+
creator: "@wbfoss",
84+
},
85+
robots: {
86+
index: true,
87+
follow: true,
88+
googleBot: {
89+
index: true,
90+
follow: true,
91+
"max-video-preview": -1,
92+
"max-image-preview": "large",
93+
"max-snippet": -1,
94+
},
95+
},
96+
alternates: {
97+
canonical: "https://fossradar.in",
98+
},
99+
verification: {
100+
google: "google-site-verification-code", // Replace with actual code
36101
},
37102
};
38103

@@ -47,6 +112,7 @@ export default function RootLayout({
47112
<ThemeProvider attribute="class" defaultTheme="system" enableSystem>
48113
{children}
49114
</ThemeProvider>
115+
<Analytics />
50116
</body>
51117
</html>
52118
);

app/opengraph-image.tsx

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
import { ImageResponse } from 'next/og';
2+
3+
export const runtime = 'edge';
4+
export const alt = "FOSSRadar.in - India's Open Source Directory";
5+
export const size = {
6+
width: 1200,
7+
height: 630,
8+
};
9+
export const contentType = 'image/png';
10+
11+
export default async function Image() {
12+
return new ImageResponse(
13+
(
14+
<div
15+
style={{
16+
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
17+
width: '100%',
18+
height: '100%',
19+
display: 'flex',
20+
flexDirection: 'column',
21+
alignItems: 'center',
22+
justifyContent: 'center',
23+
fontFamily: 'system-ui',
24+
}}
25+
>
26+
<div
27+
style={{
28+
display: 'flex',
29+
alignItems: 'center',
30+
gap: '20px',
31+
marginBottom: '30px',
32+
}}
33+
>
34+
<div
35+
style={{
36+
width: '80px',
37+
height: '80px',
38+
borderRadius: '50%',
39+
background: 'white',
40+
display: 'flex',
41+
alignItems: 'center',
42+
justifyContent: 'center',
43+
fontSize: '50px',
44+
}}
45+
>
46+
📡
47+
</div>
48+
<div
49+
style={{
50+
fontSize: '80px',
51+
fontWeight: 'bold',
52+
color: 'white',
53+
letterSpacing: '-2px',
54+
}}
55+
>
56+
fossradar
57+
</div>
58+
</div>
59+
<div
60+
style={{
61+
fontSize: '40px',
62+
color: 'rgba(255, 255, 255, 0.9)',
63+
textAlign: 'center',
64+
maxWidth: '900px',
65+
}}
66+
>
67+
India's Open Source Directory
68+
</div>
69+
<div
70+
style={{
71+
fontSize: '28px',
72+
color: 'rgba(255, 255, 255, 0.7)',
73+
marginTop: '20px',
74+
textAlign: 'center',
75+
}}
76+
>
77+
Discover · Explore · Contribute
78+
</div>
79+
</div>
80+
),
81+
{
82+
...size,
83+
}
84+
);
85+
}

app/page.tsx

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,34 @@ import { ProjectGrid } from "@/components/ProjectGrid";
33
import { ThemeToggle } from "@/components/ThemeToggle";
44
import { Github, FileCode, Map, Radar } from "lucide-react";
55
import Link from "next/link";
6+
import type { Metadata } from "next";
67

78
export const revalidate = 3600; // Revalidate every hour
89

10+
export const metadata: Metadata = {
11+
title: "FOSSRadar.in - Discover Open Source Projects from India",
12+
description: "Explore India's vibrant open source ecosystem. Search, filter, and discover FOSS projects by Indian founders, organizations, and contributors. Find projects by location, technology, and domain.",
13+
keywords: [
14+
"open source india",
15+
"foss projects",
16+
"indian developers",
17+
"github projects india",
18+
"open source directory",
19+
"indian tech community",
20+
"developer projects",
21+
"open source contributors"
22+
],
23+
openGraph: {
24+
title: "FOSSRadar.in - Discover Open Source Projects from India",
25+
description: "Explore India's vibrant open source ecosystem. Search and discover FOSS projects by Indian founders and contributors.",
26+
url: "https://fossradar.in",
27+
type: "website",
28+
},
29+
alternates: {
30+
canonical: "https://fossradar.in",
31+
},
32+
};
33+
934
export default function Home() {
1035
const projects = loadAllProjects();
1136

app/radar/page.tsx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,35 @@ import { loadAllProjects } from "@/lib/projects";
22
import { ThemeToggle } from "@/components/ThemeToggle";
33
import { Github, MapPin, Package, TrendingUp, Building2, Star, ArrowUpRight, FileCode, Map, Radar } from "lucide-react";
44
import Link from "next/link";
5+
import type { Metadata } from "next";
56

67
export const revalidate = 3600; // Revalidate every hour
78

9+
export const metadata: Metadata = {
10+
title: "Geographic Radar - Explore Projects by Location",
11+
description: "Explore open source projects across India by state and city. Interactive analytics dashboard showing project distribution, top states, verified projects, and geographic insights.",
12+
keywords: [
13+
"open source india map",
14+
"projects by state",
15+
"indian tech cities",
16+
"kolkata projects",
17+
"bangalore projects",
18+
"mumbai projects",
19+
"delhi projects",
20+
"geographic distribution",
21+
"tech hubs india"
22+
],
23+
openGraph: {
24+
title: "Geographic Radar - Explore Indian Open Source Projects by Location",
25+
description: "Interactive analytics dashboard showing open source project distribution across Indian states and cities.",
26+
url: "https://fossradar.in/radar",
27+
type: "website",
28+
},
29+
alternates: {
30+
canonical: "https://fossradar.in/radar",
31+
},
32+
};
33+
834
export default function RadarPage() {
935
const projects = loadAllProjects();
1036

app/sitemap.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@ export default function sitemap(): MetadataRoute.Sitemap {
1313
changeFrequency: "daily",
1414
priority: 1,
1515
},
16+
{
17+
url: `${baseUrl}/radar`,
18+
lastModified: new Date(),
19+
changeFrequency: "daily",
20+
priority: 0.9,
21+
},
22+
{
23+
url: `${baseUrl}/about`,
24+
lastModified: new Date(),
25+
changeFrequency: "monthly",
26+
priority: 0.7,
27+
},
1628
];
1729

1830
// Project pages

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
},
1515
"dependencies": {
1616
"@octokit/rest": "^21.0.2",
17+
"@vercel/analytics": "^1.5.0",
1718
"clsx": "^2.1.1",
1819
"fuse.js": "^7.0.0",
1920
"lucide-react": "^0.553.0",

pnpm-lock.yaml

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)