Skip to content
Open
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
58 changes: 55 additions & 3 deletions app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,54 @@ import { Montserrat } from "next/font/google";
import "./globals.css";
import { ThemeProvider } from "@/components/theme-provider";
import { Analytics } from "@vercel/analytics/react"
import { generateSchemaMarkup, generateFAQSchema } from "./schema";

const montserrat = Montserrat({
variable: '--font-montserrat',
subsets: ['latin']
})

export const metadata: Metadata = {
title: "ReChrome | Find chrome versions you need.",
description: "ReChrome is an open-sourced project that displays old versions of chrome, ready to be downloaded for various different operating systems.",
keywords: ['chrome', 'rechrome', 'chrome versions', 'versions', 'version', 'old'],
title: "ReChrome - Download Old Chrome Versions | Chrome Version Archive",
description: "Download old Chrome versions for Windows, macOS, and Linux. Access the complete Chrome version history and archive with easy one-click downloads.",
keywords: ['chrome versions', 'download old chrome', 'chrome version history', 'old chrome versions', 'chrome archive', 'legacy chrome', 'chrome downloads', 'rechrome'],
metadataBase: new URL(process.env.NEXT_PUBLIC_URL || "https://rechrome.vercel.app/"),
openGraph: {
title: "ReChrome - Download Old Chrome Versions",
description: "Find and download any Chrome version you need. Complete archive with one-click downloads for all operating systems.",
url: "/",
siteName: "ReChrome",
type: "website",
images: [
{
url: "/og-image.png",
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

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

The Open Graph image file '/og-image.png' referenced in the metadata does not exist in the public directory. This will cause broken image links when the page is shared on social media platforms. Either create the og-image.png file in the public directory with dimensions 1200x630, or remove the Open Graph image configuration.

Copilot uses AI. Check for mistakes.
width: 1200,
height: 630,
alt: "ReChrome - Download Old Chrome Versions",
},
],
},
twitter: {
card: "summary_large_image",
title: "ReChrome - Download Old Chrome Versions",
description: "Find and download any Chrome version you need. Complete Chrome version archive.",
creator: "@itzcodex24",
images: ["/og-image.png"],
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

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

The Twitter image file '/og-image.png' referenced in the metadata does not exist in the public directory. This will cause broken image links when the page is shared on Twitter/X. Either create the og-image.png file in the public directory, or remove the Twitter image configuration.

Suggested change
images: ["/og-image.png"],

Copilot uses AI. Check for mistakes.
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-snippet": -1,
"max-image-preview": "large",
"max-video-preview": -1,
},
},
alternates: {
canonical: "/",
},
};

export default function RootLayout({
Expand All @@ -22,6 +60,20 @@ export default function RootLayout({
}>) {
return (
<html suppressHydrationWarning>
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(generateSchemaMarkup()),
}}
/>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(generateFAQSchema()),
}}
/>
</head>
Comment on lines +63 to +76
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

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

Next.js automatically handles adding the custom head elements in the layout through the metadata API. Manually adding a head element in the JSX can potentially cause conflicts or duplicate head elements. Consider using the metadata API's other.ldJson or viewport fields instead, or verify that this manual approach doesn't conflict with Next.js's automatic head management.

Copilot uses AI. Check for mistakes.
<body
className={`${montserrat.className} antialiased`}
>
Expand Down
73 changes: 73 additions & 0 deletions app/schema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
export function generateSchemaMarkup() {
return {
"@context": "https://schema.org",
"@type": "WebApplication",
"name": "ReChrome",
"description": "Download old Chrome versions for Windows, macOS, and Linux. Access the complete Chrome version history and archive.",
"url": "https://rechrome.vercel.app/",
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

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

The sitemap is hardcoded to use 'https://rechrome.dev' in the schema markup URL field instead of using the dynamic baseUrl from the environment variable. This creates inconsistency with the sitemap.ts file which correctly uses the NEXT_PUBLIC_URL environment variable. Consider using the environment variable here as well for consistency across environments.

Copilot uses AI. Check for mistakes.
"applicationCategory": "UtilityApplication",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"author": {
"@type": "Person",
"name": "itzcodex24",
"url": "https://x.com/itzcodex24"
},
"creator": {
"@type": "Organization",
"name": "ReChrome Contributors"
},
"sourceOrganization": {
"@type": "Organization",
"name": "ReChrome",
"url": "https://rechrome.vercel.app/"
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

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

The sourceOrganization URL is hardcoded to 'https://rechrome.dev' instead of using a dynamic environment variable. This creates inconsistency with the sitemap.ts file which correctly uses the NEXT_PUBLIC_URL environment variable. Consider using the environment variable here as well for consistency across environments.

Copilot uses AI. Check for mistakes.
},
"operatingSystem": ["Windows", "macOS", "Linux"],
"inLanguage": "en-US",
"isAccessibleForFree": true
};
}

export function generateFAQSchema() {
return {
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "What is ReChrome?",
"acceptedAnswer": {
"@type": "Answer",
"text": "ReChrome is an open-source project that provides easy access to old Chrome versions for download. Stop digging through the internet to find specific Chrome versions."
}
},
{
"@type": "Question",
"name": "Can I download old Chrome versions?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes! ReChrome provides direct downloads to the official Chrome version archive. All download links are public and come from Google's official sources."
}
},
{
"@type": "Question",
"name": "What operating systems are supported?",
"acceptedAnswer": {
"@type": "Answer",
"text": "ReChrome supports Windows, macOS, and Linux. You can download old Chrome versions for any of these operating systems."
}
},
{
"@type": "Question",
"name": "Is ReChrome affiliated with Google?",
"acceptedAnswer": {
"@type": "Answer",
"text": "No, ReChrome is not affiliated with Google. It is an open-source project that provides convenient access to Chrome versions from Google's official archive."
}
}
]
};
}
14 changes: 14 additions & 0 deletions app/sitemap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { MetadataRoute } from 'next';

export default function sitemap(): MetadataRoute.Sitemap {
const baseUrl = process.env.NEXT_PUBLIC_URL || 'https://rechrome.vercel.app/';

return [
{
url: baseUrl,
lastModified: new Date(),
changeFrequency: 'daily',
priority: 1,
},
];
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "rechrome",
"version": "0.2.0",
"version": "0.3.0",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
Expand Down
Binary file added public/og-image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
43 changes: 43 additions & 0 deletions public/robots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# ReChrome - Chrome Version Archive
# https://rechrome.vercel.app/

User-agent: *
Allow: /
Disallow:

# Sitemap
Sitemap: https://rechrome.vercel.app/sitemap.xml

# Crawl delay (optional - set reasonable delays)
Crawl-delay: 1

# Specific bots
User-agent: Googlebot
Allow: /
Crawl-delay: 0

User-agent: Bingbot
Allow: /
Crawl-delay: 1

User-agent: Slurp
Allow: /

User-agent: DuckDuckBot
Allow: /

User-agent: Baiduspider
Allow: /

User-agent: Yandexbot
Allow: /

# Block bad bots
User-agent: MJ12bot
Disallow: /

User-agent: AhrefsBot
Disallow: /

User-agent: SemrushBot
Disallow: /
Comment on lines +40 to +43
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

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

Blocking AhrefsBot and SemrushBot prevents these legitimate SEO audit tools from crawling your site. While they do consume bandwidth, these bots are commonly used by website owners for SEO analysis and competitive research. Consider allowing these bots with a reasonable crawl-delay instead of completely blocking them, unless there's a specific reason to prevent SEO auditing of the site.

Suggested change
Disallow: /
User-agent: SemrushBot
Disallow: /
Allow: /
Crawl-delay: 5
User-agent: SemrushBot
Allow: /
Crawl-delay: 5

Copilot uses AI. Check for mistakes.