Commit 47e887cd by Arjun Jhukal

optimized the sitemap cannonical for exlclusive game homepage and general pages…

optimized the sitemap cannonical for exlclusive game homepage and general pages and also updated the robots.txt
parent 3d924a35
User-agent: *
Disallow:
Sitemap: https://www.getfirekirin.com/sitemap.xml
\ No newline at end of file
import ExclusiveGameDetail from "@/components/pages/dashboard/userDashboard/games/exclusiveGames/exclusiveGameDetail"; import ExclusiveGameDetail from "@/components/pages/dashboard/userDashboard/games/exclusiveGames/exclusiveGameDetail";
import { getSingleGame } from "@/serverApi/game"; import { getSingleGame } from "@/serverApi/game";
import { cookies } from "next/headers"; import { Metadata } from "next";
const SITE_URL = process.env.NEXT_PUBLIC_FRONTEND_URL!;
export async function generateMetadata(props: { params: Promise<{ id: string }> }): Promise<Metadata> {
const { id } = await props.params;
const canonicalUrl = `${SITE_URL}/exclusive-games/${id}`.replace(/\/$/, "");
return {
alternates: {
canonical: canonicalUrl,
},
};
}
export default async function UserGameDetail(props: { params: Promise<{ id: string }> }) { export default async function UserGameDetail(props: { params: Promise<{ id: string }> }) {
const { id } = await props.params; const { id } = await props.params;
......
import ExclusiveGamePage from '@/components/pages/dashboard/userDashboard/games/exclusiveGames' import ExclusiveGamePage from '@/components/pages/dashboard/userDashboard/games/exclusiveGames'
import React from 'react'
export default function ExclusiveGames() { export default function ExclusiveGames() {
return ( return (
<ExclusiveGamePage /> <ExclusiveGamePage />
) )
......
import { getPageDetail } from '@/serverApi/pages'; import { getPageDetail } from '@/serverApi/pages';
import { renderHTML } from '@/utils/RenderHTML'; import { renderHTML } from '@/utils/RenderHTML';
import { ArrowRight2 } from '@wandersonalwes/iconsax-react'; import { Metadata } from 'next';
import { notFound, redirect } from 'next/navigation'; import { notFound } from 'next/navigation';
import React from 'react' const SITE_URL = process.env.NEXT_PUBLIC_FRONTEND_URL!;
export async function generateMetadata(props: { params: Promise<{ slug: string }> }): Promise<Metadata> {
const { slug } = await props.params;
const canonicalUrl = `${SITE_URL}/general/${slug}`.replace(/\/$/, "");
return {
alternates: {
canonical: canonicalUrl,
},
};
}
export default async function GeneralPage(props: { params: Promise<{ slug: string }> }) { export default async function GeneralPage(props: { params: Promise<{ slug: string }> }) {
const { slug } = await props.params; const { slug } = await props.params;
let pageData = null; let pageData = null;
......
import GlassWrapper from "@/components/molecules/GlassWrapper";
import Dashboard from "@/components/pages/dashboard"; import Dashboard from "@/components/pages/dashboard";
import UspSlider from "@/components/pages/dashboard/UspSlider"; import UspSlider from "@/components/pages/dashboard/UspSlider";
import ProtectedLink from "@/routes/ProtectedLink";
import { getAllGames, getSubGames, getUsp } from "@/serverApi/game"; import { getAllGames, getSubGames, getUsp } from "@/serverApi/game";
import { getBanners, getSubBanners } from "@/serverApi/pages"; import { getBanners, getSubBanners } from "@/serverApi/pages";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import DashboardProvider from "./DashboardProvider"; import DashboardProvider from "./DashboardProvider";
import GlassWrapper from "@/components/molecules/GlassWrapper";
import { Stack } from "@mui/material";
import KycBanner from "@/components/pages/dashboard/userDashboard/verifyKyc/KycBanner";
export const dynamic = "force-dynamic"; export const dynamic = "force-dynamic";
...@@ -141,7 +138,7 @@ export default async function Home() { ...@@ -141,7 +138,7 @@ export default async function Home() {
className="dashboard-card1 col-span-1 flex justify-between px-10 gap-2 rounded-[24px]"> className="dashboard-card1 col-span-1 flex justify-between px-10 gap-2 rounded-[24px]">
<div className="py-7 gap-6"> <div className="py-7 gap-6">
{subBanner.name && ( {subBanner.name && (
<h1 <h2
className="text-[40px] mb-[8px]" className="text-[40px] mb-[8px]"
style={{ style={{
color: "#FBD230", color: "#FBD230",
...@@ -150,7 +147,7 @@ export default async function Home() { ...@@ -150,7 +147,7 @@ export default async function Home() {
}} }}
> >
{subBanner.name} {subBanner.name}
</h1> </h2>
)} )}
{subBanner.description && ( {subBanner.description && (
<p <p
......
import { pageSEO } from "@/serverApi/game"; import { pageSEO } from "@/serverApi/game";
import type { Metadata } from "next"; import type { Metadata } from "next";
import { Inter } from "next/font/google"; import { Inter } from "next/font/google";
import Script from "next/script";
import React from "react"; import React from "react";
import "./globals.css"; import "./globals.css";
import ProviderWrapper from "./ProviderWrapper"; import ProviderWrapper from "./ProviderWrapper";
import { SeonProvider } from "./SeonProvider"; import { SeonProvider } from "./SeonProvider";
import TopLoader from "./TopLoader"; import TopLoader from "./TopLoader";
const metadata: Metadata = { const metadata: Metadata = {
title: "Sweepstake", title: "Sweepstake",
description: "Sweepstake - Online Gaming Platform", description: "Sweepstake - Online Gaming Platform",
...@@ -14,6 +14,10 @@ const metadata: Metadata = { ...@@ -14,6 +14,10 @@ const metadata: Metadata = {
icon: "/assets/images/logo.png", icon: "/assets/images/logo.png",
}, },
}; };
const GTM_ID = process.env.NEXT_PUBLIC_GTM_ID;
const SITE_URL = process.env.NEXT_PUBLIC_FRONTEND_URL!;
export async function generateMetadata(): Promise<Metadata> { export async function generateMetadata(): Promise<Metadata> {
try { try {
const response = await pageSEO(); const response = await pageSEO();
...@@ -28,6 +32,9 @@ export async function generateMetadata(): Promise<Metadata> { ...@@ -28,6 +32,9 @@ export async function generateMetadata(): Promise<Metadata> {
images: seoData?.data?.logo ? [seoData.logo] : ["/assets/images/logo.png"], images: seoData?.data?.logo ? [seoData.logo] : ["/assets/images/logo.png"],
}, },
icons: seoData?.data?.favicon || metadata.icons, icons: seoData?.data?.favicon || metadata.icons,
alternates: {
canonical: SITE_URL.replace(/\/$/, ""),
},
}; };
} catch (error) { } catch (error) {
console.error("SEO metadata fetch failed:", error); console.error("SEO metadata fetch failed:", error);
...@@ -41,6 +48,7 @@ const inter = Inter({ ...@@ -41,6 +48,7 @@ const inter = Inter({
adjustFontFallback: false adjustFontFallback: false
}); });
export default function RootLayout({ export default function RootLayout({
children, children,
}: Readonly<{ }: Readonly<{
...@@ -48,14 +56,45 @@ export default function RootLayout({ ...@@ -48,14 +56,45 @@ export default function RootLayout({
}>) { }>) {
return ( return (
<html lang="en"> <html lang="en">
<head>
{GTM_ID && (
<Script
id="gtm-init"
strategy="afterInteractive"
dangerouslySetInnerHTML={{
__html: `
(function(w,d,s,l,i){w[l]=w[l]||[];
w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});
var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';
j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;
f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','${GTM_ID}');
`,
}}
/>
)}
</head>
{/* className="dark" */} {/* className="dark" */}
<body className={`${inter.className} scroll-smooth`} cz-shortcut-listen="true"> <body className={`${inter.className} scroll-smooth`} cz-shortcut-listen="true">
{GTM_ID && (
<noscript>
<iframe
src={`https://www.googletagmanager.com/ns.html?id=${GTM_ID}`}
height="0"
width="0"
style={{ display: "none", visibility: "hidden" }}
/>
</noscript>
)}
<SeonProvider> <SeonProvider>
<ProviderWrapper> <ProviderWrapper>
<React.Suspense fallback={<div />}> <React.Suspense fallback={<div />}>
<TopLoader /> <TopLoader />
</React.Suspense> </React.Suspense>
{children} {children}
</ProviderWrapper> </ProviderWrapper>
</SeonProvider> </SeonProvider>
......
...@@ -20,8 +20,9 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> { ...@@ -20,8 +20,9 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
const urls: MetadataRoute.Sitemap = [ const urls: MetadataRoute.Sitemap = [
{ {
url: frontendUrl, url: frontendUrl,
lastModified: new Date(), priority: 1
changeFrequency: "monthly", // lastModified: new Date(),
// changeFrequency: "monthly",
}, },
]; ];
...@@ -29,8 +30,9 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> { ...@@ -29,8 +30,9 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
if (menuData?.data?.length) { if (menuData?.data?.length) {
const menuUrls: MetadataRoute.Sitemap = menuData.data.map((menu: any) => ({ const menuUrls: MetadataRoute.Sitemap = menuData.data.map((menu: any) => ({
url: `${frontendUrl}/general/${menu.slug}`, url: `${frontendUrl}/general/${menu.slug}`,
lastModified: new Date(), // lastModified: new Date(),
changeFrequency: "weekly", // changeFrequency: "weekly",
priority: 0.9
})); }));
urls.push(...menuUrls); urls.push(...menuUrls);
...@@ -40,8 +42,9 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> { ...@@ -40,8 +42,9 @@ export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
if (gameData.length) { if (gameData.length) {
const gameUrls: MetadataRoute.Sitemap = gameData.map((game: any) => ({ const gameUrls: MetadataRoute.Sitemap = gameData.map((game: any) => ({
url: `${frontendUrl}/exclusive-games/${game.id}`, url: `${frontendUrl}/exclusive-games/${game.id}`,
lastModified: new Date(), // lastModified: new Date(),
changeFrequency: "weekly", // changeFrequency: "weekly",
priority: 0.9
})); }));
urls.push(...gameUrls); urls.push(...gameUrls);
......
"use client"; "use client";
import Image from "next/image";
import React, { useEffect, useState, useRef } from "react";
import { motion, useMotionValue, useTransform, animate } from "framer-motion";
import GlassWrapper from "@/components/molecules/GlassWrapper"; import GlassWrapper from "@/components/molecules/GlassWrapper";
import { animate, motion, useMotionValue } from "framer-motion";
import Image from "next/image";
import { useEffect, useRef, useState } from "react";
interface UspItem { interface UspItem {
title: string; title: string;
...@@ -40,9 +40,9 @@ export default function UspSlider({ uspData }: { uspData: UspItem[] }) { ...@@ -40,9 +40,9 @@ export default function UspSlider({ uspData }: { uspData: UspItem[] }) {
return ( return (
<section className="usp__slider w-full px-4 mt-8"> <section className="usp__slider w-full px-4 mt-8">
<h2 className="text-lg md:text-xl font-semibold mb-4"> <h1 className="text-lg md:text-xl font-semibold mb-4">
Top 10 Trending Games Top 10 Trending Games
</h2> </h1>
<div className="relative w-full overflow-hidden"> <div className="relative w-full overflow-hidden">
<motion.div <motion.div
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment