diff --git a/apps/web/app/(routes)/[lang]/[project]/auction/sitemap.ts b/apps/web/app/(routes)/[lang]/[project]/auction/sitemap.ts index c716b1b9..f88e3d6f 100644 --- a/apps/web/app/(routes)/[lang]/[project]/auction/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/[project]/auction/sitemap.ts @@ -1,27 +1,23 @@ -import { getDictionary } from '@/dictionaries' import { AVAILABLE_LANGS } from '@/lib/config' -import { getProjects } from '@/lib/projects' -import type { ProjectPageProps } from '@/types/routing.type' import type { MetadataRoute } from 'next' +import { generateStaticParams } from '../page' -export default async function sitemap({ - params, -}: ProjectPageProps): Promise { - const dict = await getDictionary(params.lang) - const projects = await getProjects(dict) +export default async function sitemap(): Promise { + const projects = await generateStaticParams() - return projects.map((project) => ({ - url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${project.slug}/auction`, + return projects.map((item) => ({ + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${item.project}/auction`, lastModified: new Date(), + changeFrequency: 'yearly', priority: 0.9, alternates: { // ? e.g.: { 'en': 'https://example.com/en/...', 'es': 'https://example.com/es/...', ... } languages: Object.fromEntries( AVAILABLE_LANGS.map((lang) => [ lang, - `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/${project.slug}/presale`, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/${item.project}/auction`, ]), ), }, })) -} +} \ No newline at end of file diff --git a/apps/web/app/(routes)/[lang]/[project]/page.tsx b/apps/web/app/(routes)/[lang]/[project]/page.tsx index e1d613bb..922cb5b6 100644 --- a/apps/web/app/(routes)/[lang]/[project]/page.tsx +++ b/apps/web/app/(routes)/[lang]/[project]/page.tsx @@ -169,3 +169,13 @@ const DynamicCtaButton = dynamic( loading: () => , }, ) + + +export async function generateMetadata({ params }: ProjectPageProps) { + const dict = await getDictionary(params.lang) + const project = await getProjectBySlug(params.project, dict) + return { + title: project?.title, + description: project?.pitch, + } +} diff --git a/apps/web/app/(routes)/[lang]/[project]/presale/page.tsx b/apps/web/app/(routes)/[lang]/[project]/presale/page.tsx index 2957a698..46ab24af 100644 --- a/apps/web/app/(routes)/[lang]/[project]/presale/page.tsx +++ b/apps/web/app/(routes)/[lang]/[project]/presale/page.tsx @@ -81,3 +81,10 @@ export default async function ProjectPage({ params }: ProjectPageProps) { ) } + +export async function generateMetadata({ params }: ProjectPageProps) { + return { + title: `Presale - ${params.project}`, + description: `Participate in the presale for ${params.project}. Contribute and be a part of the project before it launches.`, + } +} diff --git a/apps/web/app/(routes)/[lang]/[project]/presale/sitemap.ts b/apps/web/app/(routes)/[lang]/[project]/presale/sitemap.ts index 3a1f8a8f..269300f4 100644 --- a/apps/web/app/(routes)/[lang]/[project]/presale/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/[project]/presale/sitemap.ts @@ -3,23 +3,22 @@ import { AVAILABLE_LANGS } from '@/lib/config' import { getProjects } from '@/lib/projects' import type { ProjectPageProps } from '@/types/routing.type' import type { MetadataRoute } from 'next' +import { generateStaticParams } from '../page' -export default async function sitemap({ - params, -}: ProjectPageProps): Promise { - const dict = await getDictionary(params.lang) - const projects = await getProjects(dict) +export default async function sitemap(): Promise { + const projects = await generateStaticParams() - return projects.map((project) => ({ - url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${project.slug}/presale`, + return projects.map((item) => ({ + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${item.project}/presale`, lastModified: new Date(), + changeFrequency: 'yearly', priority: 0.9, alternates: { // ? e.g.: { 'en': 'https://example.com/en/...', 'es': 'https://example.com/es/...', ... } languages: Object.fromEntries( AVAILABLE_LANGS.map((lang) => [ lang, - `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/${project.slug}/presale`, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/${item.project}/presale`, ]), ), }, diff --git a/apps/web/app/(routes)/[lang]/[project]/sitemap.ts b/apps/web/app/(routes)/[lang]/[project]/sitemap.ts index 630be453..497fd06b 100644 --- a/apps/web/app/(routes)/[lang]/[project]/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/[project]/sitemap.ts @@ -1,25 +1,21 @@ -import { getDictionary } from '@/dictionaries' import { AVAILABLE_LANGS } from '@/lib/config' -import { getProjects } from '@/lib/projects' -import type { ProjectPageProps } from '@/types/routing.type' import type { MetadataRoute } from 'next' +import { generateStaticParams } from './page' -export default async function sitemap({ - params, -}: ProjectPageProps): Promise { - const dict = await getDictionary(params.lang) - const projects = await getProjects(dict) +export default async function sitemap(): Promise { + const projects = await generateStaticParams() - return projects.map((project) => ({ - url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${project.slug}`, + return projects.map((item) => ({ + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${item.project}`, lastModified: new Date(), - priority: 0.9, + changeFrequency: 'yearly', + priority: 0.7, alternates: { // ? e.g.: { 'en': 'https://example.com/en/...', 'es': 'https://example.com/es/...', ... } languages: Object.fromEntries( AVAILABLE_LANGS.map((lang) => [ lang, - `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/${project.slug}`, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/${item.project}`, ]), ), }, diff --git a/apps/web/app/(routes)/[lang]/about/about-bitlauncher/page.tsx b/apps/web/app/(routes)/[lang]/about/about-bitlauncher/page.tsx index 3c66161a..2b29aff9 100644 --- a/apps/web/app/(routes)/[lang]/about/about-bitlauncher/page.tsx +++ b/apps/web/app/(routes)/[lang]/about/about-bitlauncher/page.tsx @@ -62,7 +62,7 @@ const content: AboutBitlauncherPageContent = { } export const metadata: Metadata = { - title: 'Bitlauncher', + title: 'About Bitlauncher - AI & Cryptocurrency Launchpad', description: - 'Be part of the intelligent future and join the Ai/Web3 revolution now!', + 'Discover Bitlauncher, the pioneering launchpad dedicated to transforming AI and cryptocurrency. Join the AI/Web3 revolution today!', } diff --git a/apps/web/app/(routes)/[lang]/about/about-bitlauncher/sitemap.ts b/apps/web/app/(routes)/[lang]/about/about-bitlauncher/sitemap.ts index e8f26d29..b5ce98c6 100644 --- a/apps/web/app/(routes)/[lang]/about/about-bitlauncher/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/about/about-bitlauncher/sitemap.ts @@ -1,10 +1,7 @@ import { AVAILABLE_LANGS } from '@/lib/config' -import type { CommonPageProps } from '@/types/routing.type' import type { MetadataRoute } from 'next' -export default async function sitemap({ - params, -}: CommonPageProps): Promise { +export default async function sitemap(): Promise { return [ { url: `https://${process.env.NEXT_PUBLIC_APP_URL}/about/about-bitlauncher`, diff --git a/apps/web/app/(routes)/[lang]/blog/[category]/[slug]/sitemap.ts b/apps/web/app/(routes)/[lang]/blog/[category]/[slug]/sitemap.ts index 8c4c29fd..c11070d6 100644 --- a/apps/web/app/(routes)/[lang]/blog/[category]/[slug]/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/blog/[category]/[slug]/sitemap.ts @@ -1,34 +1,24 @@ import { AVAILABLE_LANGS } from '@/lib/config' -import { getBlogCategoryLandingData } from '@/services/datocms' +import { getAllArticles } from '@/services/datocms/datocms-all-articles.service' import type { MetadataRoute } from 'next' -import type { ArticlePageProps } from './page' -export default async function sitemap( - props: ArticlePageProps, -): Promise { - const { - params: { lang, category }, - } = props - const data = await getBlogCategoryLandingData(lang, category) - if (!data) return [] - - const { sections } = data - if (!sections) return [] - - const slugs = sections.map((section) => section.slug) - - return slugs.map((slug) => ({ - url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/blog/${category}/${slug}`, - lastModified: new Date(), - priority: 0.5, - alternates: { - // ? e.g.: { 'en': 'https://example.com/en/...', 'es': 'https://example.com/es/...', ... } - languages: Object.fromEntries( - AVAILABLE_LANGS.map((lang) => [ - lang, - `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/blog/${category}/${slug}`, - ]), - ), - }, - })) +export default async function sitemap(): Promise { + const articles = await getAllArticles() + if (!articles) return [] + + return articles.flatMap((item) => + item.articles.map((article) => ({ + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/blog/${item.category}/${article.slug}`, + lastModified: article._publishedAt, + priority: 0.6, + alternates: { + languages: Object.fromEntries( + AVAILABLE_LANGS.map((lang) => [ + lang, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/blog/${item.category}/${article.slug}`, + ]), + ), + }, + })), + ) } diff --git a/apps/web/app/(routes)/[lang]/blog/[category]/sitemap.ts b/apps/web/app/(routes)/[lang]/blog/[category]/sitemap.ts index 4989983d..9c0656b4 100644 --- a/apps/web/app/(routes)/[lang]/blog/[category]/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/blog/[category]/sitemap.ts @@ -1,24 +1,19 @@ import { AVAILABLE_LANGS } from '@/lib/config' import { getArticleSections } from '@/services/datocms' import type { MetadataRoute } from 'next' -import type { CategoryPageProps } from './page' -export default async function sitemap( - props: CategoryPageProps, -): Promise { - const { - params: { lang }, - } = props +export default async function sitemap(): Promise { let sections = [] try { - sections = await getArticleSections(lang) + sections = await getArticleSections('en') } catch (error) { return [] } const categories = sections.map((section) => section.slug) + return categories.map((category) => ({ - url: `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/blog/${category}`, + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/blog/${category}`, lastModified: new Date(), priority: 0.7, alternates: { diff --git a/apps/web/app/(routes)/[lang]/blog/page.tsx b/apps/web/app/(routes)/[lang]/blog/page.tsx index eca2b0c4..2cb986ef 100644 --- a/apps/web/app/(routes)/[lang]/blog/page.tsx +++ b/apps/web/app/(routes)/[lang]/blog/page.tsx @@ -33,7 +33,7 @@ export default async function BlogPage({ params }: BlogPageProps) { export async function generateMetadata({ params, }: BlogPageProps): Promise { - const pageSeo = await getPageSeoText('home') + const pageSeo = await getPageSeoText('bitlauncher') const seoData = { title: pageSeo.pageSeo?.title || '', description: pageSeo.pageSeo?.description || '', diff --git a/apps/web/app/(routes)/[lang]/blog/sitemap.ts b/apps/web/app/(routes)/[lang]/blog/sitemap.ts index e6c59d79..562c193d 100644 --- a/apps/web/app/(routes)/[lang]/blog/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/blog/sitemap.ts @@ -1,10 +1,7 @@ import { AVAILABLE_LANGS } from '@/lib/config' -import type { CommonPageProps } from '@/types/routing.type' import type { MetadataRoute } from 'next' -export default async function sitemap({ - params, -}: CommonPageProps): Promise { +export default async function sitemap(): Promise { return [ { url: `https://${process.env.NEXT_PUBLIC_APP_URL}/blog`, diff --git a/apps/web/app/(routes)/[lang]/learn/security/page.tsx b/apps/web/app/(routes)/[lang]/learn/security/page.tsx index 8362bf73..82fd034f 100644 --- a/apps/web/app/(routes)/[lang]/learn/security/page.tsx +++ b/apps/web/app/(routes)/[lang]/learn/security/page.tsx @@ -31,7 +31,7 @@ export default async function SecurityTips({ params }: CommonPageProps) { } export const metadata: Metadata = { - title: 'Security Tips | Bitlauncher', + title: 'Top Security Tips for a Safer Digital Experience', description: - 'Be part of the intelligent future and join the Ai/Web3 revolution now!', + 'Discover essential security tips to protect yourself online. Join the AI/Web3 revolution and stay ahead with our expert advice.', } diff --git a/apps/web/app/(routes)/[lang]/legal/privacy/page.tsx b/apps/web/app/(routes)/[lang]/legal/privacy/page.tsx index be38e293..fbb4f750 100644 --- a/apps/web/app/(routes)/[lang]/legal/privacy/page.tsx +++ b/apps/web/app/(routes)/[lang]/legal/privacy/page.tsx @@ -14,7 +14,7 @@ export default async function PrivacyPolicy({ params }: CommonPageProps) { } export const metadata: Metadata = { - title: 'Privacy Policy | Bitlauncher', + title: 'Privacy Policy', description: 'Read our Privacy Policy to understand how we protect and manage your data in our crypto launchpad application.', } diff --git a/apps/web/app/(routes)/[lang]/legal/terms/page.tsx b/apps/web/app/(routes)/[lang]/legal/terms/page.tsx index be38e293..e631cb0f 100644 --- a/apps/web/app/(routes)/[lang]/legal/terms/page.tsx +++ b/apps/web/app/(routes)/[lang]/legal/terms/page.tsx @@ -14,7 +14,7 @@ export default async function PrivacyPolicy({ params }: CommonPageProps) { } export const metadata: Metadata = { - title: 'Privacy Policy | Bitlauncher', + title: 'Terms of Service', description: - 'Read our Privacy Policy to understand how we protect and manage your data in our crypto launchpad application.', -} + 'Review our Terms of Service to understand the rules and regulations for using our crypto launchpad application.', +} \ No newline at end of file diff --git a/apps/web/app/(routes)/[lang]/sitemap.ts b/apps/web/app/(routes)/[lang]/sitemap.ts index 766a6c12..94e4a976 100644 --- a/apps/web/app/(routes)/[lang]/sitemap.ts +++ b/apps/web/app/(routes)/[lang]/sitemap.ts @@ -1,14 +1,12 @@ import { AVAILABLE_LANGS } from '@/lib/config' -import type { CommonPageProps } from '@/types/routing.type' import type { MetadataRoute } from 'next' -export default async function sitemap({ - params, -}: CommonPageProps): Promise { +export default async function sitemap(): Promise { return [ { url: `https://${process.env.NEXT_PUBLIC_APP_URL}`, lastModified: new Date(), + changeFrequency: 'yearly', priority: 1, alternates: { // ? e.g.: { 'en': 'https://example.com/en/...', 'es': 'https://example.com/es/...', ... } @@ -20,5 +18,61 @@ export default async function sitemap({ ), }, }, + { + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/blog`, + lastModified: new Date(), + changeFrequency: 'monthly', + priority: 0.8, + alternates: { + languages: Object.fromEntries( + AVAILABLE_LANGS.map((lang) => [ + lang, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/blog`, + ]), + ), + }, + }, + { + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/whitepaper`, + lastModified: new Date(), + changeFrequency: 'yearly', + priority: 0.6, + alternates: { + languages: Object.fromEntries( + AVAILABLE_LANGS.map((lang) => [ + lang, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/whitepaper`, + ]), + ), + }, + }, + { + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/learn/security`, + lastModified: new Date(), + changeFrequency: 'yearly', + priority: 0.6, + alternates: { + languages: Object.fromEntries( + AVAILABLE_LANGS.map((lang) => [ + lang, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/learn/security`, + ]), + ), + }, + }, + { + url: `https://${process.env.NEXT_PUBLIC_APP_URL}/about/about-bitlauncher`, + lastModified: new Date(), + changeFrequency: 'yearly', + priority: 0.6, + alternates: { + languages: Object.fromEntries( + AVAILABLE_LANGS.map((lang) => [ + lang, + `https://${process.env.NEXT_PUBLIC_APP_URL}/${lang}/about/about-bitlauncher`, + ]), + ), + }, + }, ] } diff --git a/apps/web/app/(routes)/[lang]/wallet/page.tsx b/apps/web/app/(routes)/[lang]/wallet/page.tsx index aa64acec..53f25273 100644 --- a/apps/web/app/(routes)/[lang]/wallet/page.tsx +++ b/apps/web/app/(routes)/[lang]/wallet/page.tsx @@ -43,9 +43,9 @@ export default function WalletPage() { } export const metadata: Metadata = { - title: 'Wallet | Bitlauncher', + title: 'Wallet Balances', description: - 'Be part of the intelligent future and join the Ai/Web3 revolution now!', + 'Your balances on the Bitlauncher | Bitcash ecosystem. Connect your Bitcash and EVM wallets', } function BalancesCard() { diff --git a/apps/web/app/(routes)/[lang]/whitepaper/page.tsx b/apps/web/app/(routes)/[lang]/whitepaper/page.tsx index 9ec64c1b..a715b8a0 100644 --- a/apps/web/app/(routes)/[lang]/whitepaper/page.tsx +++ b/apps/web/app/(routes)/[lang]/whitepaper/page.tsx @@ -10,6 +10,6 @@ export default async function WhitepaperPage() { } export const metadata: Metadata = { - title: 'Bitlauncher', - description: 'Whitepaper', + title: 'Comprehensive Whitepaper', + description: 'Explore the detailed whitepaper of Bitlauncher, covering all aspects of our innovative platform and technology.', } diff --git a/apps/web/app/sitemap.ts b/apps/web/app/sitemap.ts index 09a52e89..b3156a2b 100644 --- a/apps/web/app/sitemap.ts +++ b/apps/web/app/sitemap.ts @@ -26,5 +26,23 @@ export default async function sitemap(): Promise { changeFrequency: 'monthly', priority: 0.7, }, + { + url: 'https://bitlauncher.ai/whitepaper', + lastModified: new Date(), + changeFrequency: 'monthly', + priority: 0.7, + }, + { + url: 'https://bitlauncher.ai/legal/terms', + lastModified: new Date(), + changeFrequency: 'monthly', + priority: 0.6, + }, + { + url: 'https://bitlauncher.ai/legal/privacy', + lastModified: new Date(), + changeFrequency: 'monthly', + priority: 0.6, + }, ] }