ceo optimization , you tobe video addeds, and connect to links to footel ancors
This commit is contained in:
@@ -4,41 +4,97 @@ import { Analytics } from "@vercel/analytics/next";
|
|||||||
import { LanguageProvider } from "@/contexts/language-context";
|
import { LanguageProvider } from "@/contexts/language-context";
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
|
|
||||||
|
// Fonts
|
||||||
const _geist = Geist({ subsets: ["latin"] });
|
const _geist = Geist({ subsets: ["latin"] });
|
||||||
const _geistMono = Geist_Mono({ subsets: ["latin"] });
|
const _geistMono = Geist_Mono({ subsets: ["latin"] });
|
||||||
|
|
||||||
|
// ---------------------------------------------
|
||||||
|
// MULTI-LANGUAGE SEO METADATA (UZ / RU / EN)
|
||||||
|
// ---------------------------------------------
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "v0 App",
|
title:
|
||||||
description: "Created with v0",
|
"DWATT – Elektr zaryadlash stansiyalarini boshqarish tizimi | EV Charging Management Platform",
|
||||||
generator: "v0.app",
|
description:
|
||||||
|
"Dwatt – elektromobil zaryadlash stansiyalarini boshqarish, monitoring va avtomatlashtirish uchun yaratilgan platforma.",
|
||||||
|
keywords: [
|
||||||
|
"dwatt",
|
||||||
|
"dwatt.uz",
|
||||||
|
"ev charging uz",
|
||||||
|
"заправка электромобилей",
|
||||||
|
"ev charging management",
|
||||||
|
"зарядная станция",
|
||||||
|
"ev charger software",
|
||||||
|
"uzbekistan ev charging",
|
||||||
|
"charging management platform",
|
||||||
|
],
|
||||||
|
authors: [{ name: "DWATT" }],
|
||||||
|
robots: "index, follow",
|
||||||
|
themeColor: "#004CEE",
|
||||||
|
metadataBase: new URL("https://dwatt.uz"),
|
||||||
|
|
||||||
|
// MULTILINGUAL SUPPORT FOR SEO
|
||||||
|
alternates: {
|
||||||
|
canonical: "https://dwatt.uz",
|
||||||
|
languages: {
|
||||||
|
"uz-UZ": "https://dwatt.uz/uz",
|
||||||
|
"ru-RU": "https://dwatt.uz/ru",
|
||||||
|
"en-US": "https://dwatt.uz/en",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// SOCIAL SHARE (Open Graph)
|
||||||
|
openGraph: {
|
||||||
|
type: "website",
|
||||||
|
url: "https://dwatt.uz",
|
||||||
|
siteName: "DWATT",
|
||||||
|
title:
|
||||||
|
"DWATT – EV Charging Management Platform | Elektr zaryadlash boshqaruvi",
|
||||||
|
description:
|
||||||
|
"Elektromobil zaryadlash stansiyalarini boshqarish, monitoring qilish va avtomatlashtirish uchun mo'ljallangan professional tizim.",
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: "https://dwatt.uz/og-image.png",
|
||||||
|
width: 1200,
|
||||||
|
height: 630,
|
||||||
|
alt: "DWATT EV Charging Platform",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
|
||||||
|
// TWITTER SEO
|
||||||
|
twitter: {
|
||||||
|
card: "summary_large_image",
|
||||||
|
title: "DWATT – Elektr zaryadlash stansiyalarini boshqarish tizimi",
|
||||||
|
description:
|
||||||
|
"Dwatt elektromobil zaryadlash stansiyalarini boshqarish uchun yaratilgan professional tizim.",
|
||||||
|
images: ["https://dwatt.uz/og-image.png"],
|
||||||
|
site: "@dwatt",
|
||||||
|
},
|
||||||
|
|
||||||
icons: {
|
icons: {
|
||||||
icon: [
|
icon: [
|
||||||
{
|
{ url: "/icon-light-32x32.png", media: "(prefers-color-scheme: light)" },
|
||||||
url: "/icon-light-32x32.png",
|
{ url: "/icon-dark-32x32.png", media: "(prefers-color-scheme: dark)" },
|
||||||
media: "(prefers-color-scheme: light)",
|
{ url: "/icon.svg", type: "image/svg+xml" },
|
||||||
},
|
|
||||||
{
|
|
||||||
url: "/icon-dark-32x32.png",
|
|
||||||
media: "(prefers-color-scheme: dark)",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
url: "/icon.svg",
|
|
||||||
type: "image/svg+xml",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
apple: "/apple-icon.png",
|
apple: "/apple-icon.png",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ---------------------------------------------
|
||||||
|
// ROOT LAYOUT WITH MULTI-LANGUAGE SUPPORT
|
||||||
|
// ---------------------------------------------
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
children,
|
children,
|
||||||
}: Readonly<{
|
}: {
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}>) {
|
}) {
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="uz" suppressHydrationWarning>
|
||||||
<body className={`font-sans antialiased`}>
|
<body className={`antialiased font-sans`}>
|
||||||
<LanguageProvider>{children}</LanguageProvider>
|
<LanguageProvider>
|
||||||
|
{children}
|
||||||
|
</LanguageProvider>
|
||||||
<Analytics />
|
<Analytics />
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
11
app/robots.ts
Normal file
11
app/robots.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
export default function robots(): MetadataRoute.Robots {
|
||||||
|
return {
|
||||||
|
rules: {
|
||||||
|
userAgent: "*",
|
||||||
|
allow: "/",
|
||||||
|
},
|
||||||
|
sitemap: "https://dwatt.uz/sitemap.xml",
|
||||||
|
};
|
||||||
|
}
|
||||||
32
app/sitemap.ts
Normal file
32
app/sitemap.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import { MetadataRoute } from "next";
|
||||||
|
|
||||||
|
export default function sitemap(): MetadataRoute.Sitemap {
|
||||||
|
const base = "https://dwatt.uz";
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
url: `${base}`,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 1.0,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `${base}/uz`,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 0.9,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `${base}/ru`,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 0.9,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
url: `${base}/en`,
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: "weekly",
|
||||||
|
priority: 0.9,
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -24,17 +24,17 @@ export default function Footer() {
|
|||||||
<h4 className="font-semibold mb-4">{t.footer.product.title}</h4>
|
<h4 className="font-semibold mb-4">{t.footer.product.title}</h4>
|
||||||
<ul className="space-y-2 text-sm text-white/70">
|
<ul className="space-y-2 text-sm text-white/70">
|
||||||
<li>
|
<li>
|
||||||
<a href="#" className="hover:text-white transition">
|
<a href="#features" className="hover:text-white transition">
|
||||||
{t.footer.product.items[0]}
|
{t.footer.product.items[0]}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" className="hover:text-white transition">
|
<a href="#pricing" className="hover:text-white transition">
|
||||||
{t.footer.product.items[1]}
|
{t.footer.product.items[1]}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" className="hover:text-white transition">
|
<a href="#secure" className="hover:text-white transition">
|
||||||
{t.footer.product.items[2]}
|
{t.footer.product.items[2]}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
@@ -50,12 +50,12 @@ export default function Footer() {
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" className="hover:text-white transition">
|
<a href="#video" className="hover:text-white transition">
|
||||||
{t.footer.company.items[1]}
|
{t.footer.company.items[1]}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="#" className="hover:text-white transition">
|
<a href="#contact" className="hover:text-white transition">
|
||||||
{t.footer.company.items[2]}
|
{t.footer.company.items[2]}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export default function HowItWorks() {
|
|||||||
];
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<section className="py-20 md:py-32 px-4 sm:px-6 lg:px-8">
|
<section id="secure" className="py-20 md:py-32 px-4 sm:px-6 lg:px-8">
|
||||||
<div className="max-w-7xl mx-auto">
|
<div className="max-w-7xl mx-auto">
|
||||||
<div className="text-center mb-12 md:mb-16">
|
<div className="text-center mb-12 md:mb-16">
|
||||||
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4">
|
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4">
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
import { useLanguage } from "@/contexts/language-context"
|
import { useLanguage } from "@/contexts/language-context"
|
||||||
import { toEmbedUrl } from "@/lib/embedUrl";
|
import { toEmbedUrl } from "@/lib/embedUrl";
|
||||||
import { Play } from "lucide-react"
|
|
||||||
|
|
||||||
export default function Video() {
|
export default function Video() {
|
||||||
const {t} = useLanguage();
|
const {t} = useLanguage();
|
||||||
return (
|
return (
|
||||||
<section className="py-20 md:py-32 px-4 sm:px-6 lg:px-8">
|
<section id="video" className="py-20 md:py-32 px-4 sm:px-6 lg:px-8">
|
||||||
<div className="max-w-4xl mx-auto">
|
<div className="max-w-4xl mx-auto">
|
||||||
<div className="text-center mb-12">
|
<div className="text-center mb-12">
|
||||||
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4">{t.action.title}</h2>
|
<h2 className="text-3xl md:text-4xl font-bold text-foreground mb-4">{t.action.title}</h2>
|
||||||
|
|||||||
Reference in New Issue
Block a user