fix: update URLs to use the "www" subdomain across the application

This commit modifies various metadata and canonical URLs in the SurfSense application to ensure consistency by using "https://www.surfsense.com" instead of "https://surfsense.com". Changes were made in layout files, blog posts, and SEO components to reflect this update.
This commit is contained in:
DESKTOP-RTLN3BA\$punk 2026-05-15 12:35:15 -07:00
parent dc88ce0277
commit 219a5977b7
18 changed files with 105 additions and 39 deletions

View file

@ -5,12 +5,12 @@ export const metadata: Metadata = {
title: "Announcements | SurfSense",
description: "Latest product updates, feature releases, and news from SurfSense.",
alternates: {
canonical: "https://surfsense.com/announcements",
canonical: "https://www.surfsense.com/announcements",
},
openGraph: {
title: "Announcements | SurfSense",
description: "Latest product updates, feature releases, and news from SurfSense.",
url: "https://surfsense.com/announcements",
url: "https://www.surfsense.com/announcements",
type: "website",
},
twitter: {

View file

@ -4,7 +4,8 @@ import Image from "next/image";
import { notFound } from "next/navigation";
import { blog } from "@/.source/server";
import { BreadcrumbNav } from "@/components/seo/breadcrumb-nav";
import { ArticleJsonLd } from "@/components/seo/json-ld";
import { ArticleJsonLd, FAQJsonLd } from "@/components/seo/json-ld";
import { extractFaqFromBlogPost } from "@/lib/blog-faq";
import { formatDate } from "@/lib/utils";
import { getMDXComponents } from "@/mdx-components";
@ -21,6 +22,8 @@ interface BlogData {
author?: string;
authorAvatar?: string;
tags?: string[];
// Populated by Fumadocs when `lastModifiedTime: "git"` is set in source.config.ts.
lastModified?: Date;
body: React.ComponentType<{
components?: Record<string, React.ComponentType>;
}>;
@ -50,7 +53,7 @@ export async function generateMetadata(props: {
title: `${page.data.title} | SurfSense Blog`,
description: page.data.description,
alternates: {
canonical: `https://surfsense.com/blog/${slug}`,
canonical: `https://www.surfsense.com/blog/${slug}`,
},
openGraph: {
title: page.data.title,
@ -78,17 +81,23 @@ export default async function BlogPostPage(props: { params: Promise<{ slug: stri
const MDX = page.data.body;
const date = new Date(page.data.date);
const dateModified = page.data.lastModified
? new Date(page.data.lastModified).toISOString()
: undefined;
const faqEntries = await extractFaqFromBlogPost(slug);
return (
<div className="min-h-screen relative pt-20">
<ArticleJsonLd
title={page.data.title}
description={page.data.description}
url={`https://surfsense.com/blog/${slug}`}
url={`https://www.surfsense.com/blog/${slug}`}
datePublished={page.data.date}
dateModified={dateModified}
author={page.data.author ?? "SurfSense Team"}
image={page.data.image ? `https://surfsense.com${page.data.image}` : undefined}
image={page.data.image ? `https://www.surfsense.com${page.data.image}` : undefined}
/>
{faqEntries.length > 0 && <FAQJsonLd questions={faqEntries} />}
<div className="max-w-3xl mx-auto px-6 lg:px-10 pt-10 pb-20">
<BreadcrumbNav
items={[

View file

@ -7,7 +7,7 @@ export const metadata: Metadata = {
title: "Blog | SurfSense - AI Search & Knowledge Management",
description: "Product updates, tutorials, and tips from the SurfSense team.",
alternates: {
canonical: "https://surfsense.com/blog",
canonical: "https://www.surfsense.com/blog",
},
};

View file

@ -9,7 +9,7 @@ export const metadata: Metadata = {
title: "Changelog | SurfSense",
description: "See what's new in SurfSense. Latest updates, features, and improvements.",
alternates: {
canonical: "https://surfsense.com/changelog",
canonical: "https://www.surfsense.com/changelog",
},
};

View file

@ -6,7 +6,7 @@ export const metadata: Metadata = {
description:
"Get in touch with the SurfSense team for enterprise AI search, knowledge management, or partnership inquiries.",
alternates: {
canonical: "https://surfsense.com/contact",
canonical: "https://www.surfsense.com/contact",
},
};

View file

@ -81,7 +81,7 @@ export async function generateMetadata({ params }: PageProps): Promise<Metadata>
const title = buildSeoTitle(model);
const description = buildSeoDescription(model);
const canonicalUrl = `https://surfsense.com/free/${model.seo_slug}`;
const canonicalUrl = `https://www.surfsense.com/free/${model.seo_slug}`;
const modelNameLower = model.name.toLowerCase();
return {
@ -161,7 +161,7 @@ export default async function FreeModelPage({ params }: PageProps) {
"@type": "WebApplication",
name: `${model.name} Free Chat Without Login - SurfSense`,
description,
url: `https://surfsense.com/free/${model.seo_slug}`,
url: `https://www.surfsense.com/free/${model.seo_slug}`,
applicationCategory: "ChatApplication",
operatingSystem: "Web",
offers: {
@ -173,12 +173,12 @@ export default async function FreeModelPage({ params }: PageProps) {
provider: {
"@type": "Organization",
name: "SurfSense",
url: "https://surfsense.com",
url: "https://www.surfsense.com",
},
isPartOf: {
"@type": "WebSite",
name: "SurfSense",
url: "https://surfsense.com",
url: "https://www.surfsense.com",
},
}}
/>

View file

@ -64,13 +64,13 @@ export const metadata: Metadata = {
"notebooklm alternative",
],
alternates: {
canonical: "https://surfsense.com/free",
canonical: "https://www.surfsense.com/free",
},
openGraph: {
title: "Free AI Chat, No Login Required | SurfSense",
description:
"Use ChatGPT free online without login. Chat with GPT-4, Claude AI, Gemini and 100+ AI models. Open source NotebookLM alternative.",
url: "https://surfsense.com/free",
url: "https://www.surfsense.com/free",
siteName: "SurfSense",
type: "website",
images: [
@ -164,8 +164,8 @@ export default async function FreeHubPage() {
name: "ChatGPT Free Online Without Login - SurfSense",
description:
"Use ChatGPT, Claude AI, Gemini and more AI models free online without login or sign-up. Open source NotebookLM alternative with no login required.",
url: "https://surfsense.com/free",
isPartOf: { "@type": "WebSite", name: "SurfSense", url: "https://surfsense.com" },
url: "https://www.surfsense.com/free",
isPartOf: { "@type": "WebSite", name: "SurfSense", url: "https://www.surfsense.com" },
mainEntity: {
"@type": "ItemList",
numberOfItems: seoModels.length,
@ -173,7 +173,7 @@ export default async function FreeHubPage() {
"@type": "ListItem",
position: i + 1,
name: m.name,
url: `https://surfsense.com/free/${m.seo_slug}`,
url: `https://www.surfsense.com/free/${m.seo_slug}`,
})),
},
}}

View file

@ -7,7 +7,7 @@ export const metadata: Metadata = {
description:
"Explore SurfSense plans and pricing. Start free with 500 pages & $5 in premium credits. Use ChatGPT, Claude AI, and premium AI models. Pay as you go at provider cost.",
alternates: {
canonical: "https://surfsense.com/pricing",
canonical: "https://www.surfsense.com/pricing",
},
};

View file

@ -4,7 +4,7 @@ export const metadata: Metadata = {
title: "Privacy Policy | SurfSense",
description: "Privacy Policy for SurfSense application",
alternates: {
canonical: "https://surfsense.com/privacy",
canonical: "https://www.surfsense.com/privacy",
},
};

View file

@ -4,7 +4,7 @@ export const metadata: Metadata = {
title: "Terms of Service | SurfSense",
description: "Terms of Service for SurfSense application",
alternates: {
canonical: "https://surfsense.com/terms",
canonical: "https://www.surfsense.com/terms",
},
};

View file

@ -50,7 +50,7 @@ export async function generateMetadata(props: { params: Promise<{ slug?: string[
title: `${page.data.title} | SurfSense Docs`,
description: page.data.description,
alternates: {
canonical: `https://surfsense.com/docs${slugPath ? `/${slugPath}` : ""}`,
canonical: `https://www.surfsense.com/docs${slugPath ? `/${slugPath}` : ""}`,
},
openGraph: {
title: `${page.data.title} | SurfSense Docs`,

View file

@ -41,9 +41,9 @@ export const viewport: Viewport = {
};
export const metadata: Metadata = {
metadataBase: new URL("https://surfsense.com"),
metadataBase: new URL("https://www.surfsense.com"),
alternates: {
canonical: "https://surfsense.com",
canonical: "https://www.surfsense.com",
},
title: "SurfSense Open Source, Privacy-Focused NotebookLM Alternative for Teams",
description:
@ -90,7 +90,7 @@ export const metadata: Metadata = {
title: "SurfSense Open Source, Privacy-Focused NotebookLM Alternative for Teams",
description:
"Open source NotebookLM alternative for teams with no data limits. Use ChatGPT, Claude, and any AI model for free.",
url: "https://surfsense.com",
url: "https://www.surfsense.com",
siteName: "SurfSense",
type: "website",
images: [

View file

@ -17,6 +17,6 @@ export default function robots(): MetadataRoute.Robots {
],
},
],
sitemap: "https://surfsense.com/sitemap.xml",
sitemap: "https://www.surfsense.com/sitemap.xml",
};
}