add metatags

features/layout-changes
Ernest Litvinenko 2024-05-27 19:21:18 +03:00
parent 3850c55b44
commit 2c7d2e7738
9 changed files with 95 additions and 49 deletions

7
docker-compose.yml Normal file
View File

@ -0,0 +1,7 @@
services:
client:
image: 80.249.144.200:5000/relynolli_client:latest-amd
platform: linux/amd64
build: .
ports:
- "3000:3000"

View File

@ -150,15 +150,15 @@ const Header = () => {
</Tooltip> </Tooltip>
{cart.data && {/*{cart.data &&*/}
<Badge isInvisible={!Boolean(cart.data.data)} color={"primary"} content={cart.data.data && cart.data.data.length} {/* <Badge isInvisible={!Boolean(cart.data.data)} color={"primary"} content={cart.data.data && cart.data.data.length}*/}
className={"text-black font-semibold"}> {/* className={"text-black font-semibold"}>*/}
<Link href={'/cart'} {/* <Link href={'/cart'}*/}
className={"rounded-[8px] group transition-colors cursor-pointer bg-transparent hover:bg-primary flex items-center px-3 h-[50px]"}> {/* className={"rounded-[8px] group transition-colors cursor-pointer bg-transparent hover:bg-primary flex items-center px-3 h-[50px]"}>*/}
<CartLogo className={"fill-white group-hover:fill-black-1 transition-colors"}/> {/* <CartLogo className={"fill-white group-hover:fill-black-1 transition-colors"}/>*/}
</Link> {/* </Link>*/}
</Badge> {/* </Badge>*/}
} {/*}*/}
</div> </div>

View File

@ -6,6 +6,7 @@ import {News} from "@/service/types/local";
import {WrapperDark} from "@/components/reusable/wrapper"; import {WrapperDark} from "@/components/reusable/wrapper";
import {Skeleton} from "@nextui-org/react"; import {Skeleton} from "@nextui-org/react";
import Link from "next/link"; import Link from "next/link";
import Head from "next/head";
const NewsCard = (props: News) => { const NewsCard = (props: News) => {
return ( return (
@ -37,6 +38,11 @@ const News = () => {
}) })
return ( return (
<>
<Head>
<title>Блог Relynolli полезные статьи о моторных маслах</title>
<meta name={"description"} content={"В нашем блоге вы найдете полезные статьи о моторных маслах, классификации, спецификациях. Рекомендации бо использовании машинных масел для двигателей от экспертов Relynolli."}/>
</Head>
<WrapperDark title={"Статьи"} breadcrumbs={[{name: "Статьи", link: "/articles"}]}> <WrapperDark title={"Статьи"} breadcrumbs={[{name: "Статьи", link: "/articles"}]}>
<div className="news-container grid grid-cols-1 lg:grid-cols-3 gap-5"> <div className="news-container grid grid-cols-1 lg:grid-cols-3 gap-5">
@ -50,7 +56,10 @@ const News = () => {
} }
</div> </div>
</WrapperDark>) </WrapperDark>
</>
)
} }

View File

@ -84,15 +84,15 @@ const OilCard = ({product}: InferGetStaticPropsType<typeof getStaticProps>) => {
<span className={"block text-base text-[#E0E3E3] font-normal"}>1 шт</span> <span className={"block text-base text-[#E0E3E3] font-normal"}>1 шт</span>
</span> </span>
{isClient && {/*{isClient &&*/}
<Button onClick={() => toggleCart.mutate({productId: product.id, quantity: 1})} {/* <Button onClick={() => toggleCart.mutate({productId: product.id, quantity: 1})}*/}
color={"primary"} {/* color={"primary"}*/}
className={"order-3 col-span-2 lg:order-none text-black font-extrabold uppercase italic h-[70px]"} {/* className={"order-3 col-span-2 lg:order-none text-black font-extrabold uppercase italic h-[70px]"}*/}
startContent={<Cart/>}> {/* startContent={<Cart/>}>*/}
{(cartItems.data && cartItems.data.data && cartItems.data.data.map((item) => item.product.id).includes(product.id)) ? "В корзине" : "Добавить в корзину"} {/* {(cartItems.data && cartItems.data.data && cartItems.data.data.map((item) => item.product.id).includes(product.id)) ? "В корзине" : "Добавить в корзину"}*/}
</Button>} {/* </Button>}*/}
{ {
isClient && isClient &&
<Button onClick={() => toggleFavourite(product.id)} <Button onClick={() => toggleFavourite(product.id)}

View File

@ -23,6 +23,7 @@ import LocalAPI from "@/service/localAPI";
import { Img } from "react-image"; import { Img } from "react-image";
import { Dispatch, SetStateAction, useEffect, useState } from "react"; import { Dispatch, SetStateAction, useEffect, useState } from "react";
import { Product } from "@/service/types/local"; import { Product } from "@/service/types/local";
import Head from "next/head";
type SelectedFiltersStruct = { type SelectedFiltersStruct = {
[key: string]: string[]; [key: string]: string[];
@ -189,25 +190,25 @@ const CatalogCard = (product: Product & { isFavourite: boolean }) => {
{`${product.price.BASE}`.replace(/\B(?=(\d{3})+(?!\d))/g, " ")} {`${product.price.BASE}`.replace(/\B(?=(\d{3})+(?!\d))/g, " ")}
</span> </span>
{(cartItems.data) ? ( {/*{(cartItems.data) ? (*/}
<Button {/* <Button*/}
onClick={() => {/* onClick={() =>*/}
toggleCart.mutate({ {/* toggleCart.mutate({*/}
productId: product.id, {/* productId: product.id,*/}
quantity: 1, {/* quantity: 1,*/}
}) {/* })*/}
} {/* }*/}
className={ {/* className={*/}
"bg-green-2 text-black-3 relative z-20 text-lg font-bold uppercase italic" {/* "bg-green-2 text-black-3 relative z-20 text-lg font-bold uppercase italic"*/}
} {/* }*/}
> {/* >*/}
{(cartItems.data && cartItems.data.data && cartItems.data.data {/* {(cartItems.data && cartItems.data.data && cartItems.data.data*/}
.map(({ productId }) => productId) {/* .map(({ productId }) => productId)*/}
.includes(product.id)) {/* .includes(product.id))*/}
? "В корзине" {/* ? "В корзине"*/}
: "В корзину"} {/* : "В корзину"}*/}
</Button> {/* </Button>*/}
) : null} {/*) : null}*/}
<Link <Link
href={"/catalog/" + product.code} href={"/catalog/" + product.code}
@ -242,6 +243,11 @@ const Catalog = (props: InferGetStaticPropsType<typeof getStaticProps>) => {
}); });
return ( return (
<>
<Head>
<title>Каталог Relynolli купить моторное масло для автомобиля и техники на официальном сайте</title>
<meta name={"description"} content={"Relynolli предлагает большой выбор моторных масел для легковых автомобилей, коммерческого транспорта и спецтехник: цены и характеристики в каталоге. Выбирайте лучшее машинное масло."}/>
</Head>
<Wrapper <Wrapper
title={"Каталог"} title={"Каталог"}
breadcrumbs={[{name: "Каталог", link: "/catalog"}]} breadcrumbs={[{name: "Каталог", link: "/catalog"}]}
@ -293,6 +299,7 @@ const Catalog = (props: InferGetStaticPropsType<typeof getStaticProps>) => {
/> />
</div> </div>
</Wrapper> </Wrapper>
</>
); );
}; };

View File

@ -1,6 +1,7 @@
import Wrapper from "@/components/reusable/wrapper"; import Wrapper from "@/components/reusable/wrapper";
import Stepper from "@/components/reusable/stepper"; import Stepper from "@/components/reusable/stepper";
import CallbackForm from "@/components/reusable/contacts/callbackForm"; import CallbackForm from "@/components/reusable/contacts/callbackForm";
import Head from "next/head";
const Form1 = () => ( const Form1 = () => (
<> <>
@ -537,6 +538,13 @@ const Contact = () => {
] ]
return ( return (
<>
<Head>
<title>Контакты Relynolli: телефоны, адреса, почта</title>
<meta name={"description"} content={"Контактная информация Relynolli: телефон, график работы компании, адреса, email. Обратная связь."}/>
</Head>
<Wrapper title={"Контакты"} breadcrumbs={[{name: "Контакты", link: "/contacts"}]}> <Wrapper title={"Контакты"} breadcrumbs={[{name: "Контакты", link: "/contacts"}]}>
<iframe className={"rounded-[20px] mb-24"} src="https://yandex.ru/map-widget/v1/?um=constructor%3Aa9c71bba18ffe78a2028d1851bd205ecebc04063c76af8dedab6bceff5c73b24&amp;source=constructor" width="100%" height="500"></iframe> <iframe className={"rounded-[20px] mb-24"} src="https://yandex.ru/map-widget/v1/?um=constructor%3Aa9c71bba18ffe78a2028d1851bd205ecebc04063c76af8dedab6bceff5c73b24&amp;source=constructor" width="100%" height="500"></iframe>
@ -576,6 +584,7 @@ const Contact = () => {
</Wrapper> </Wrapper>
</>
) )
} }

View File

@ -15,6 +15,7 @@ import {News, Wrapper} from "@/service/types/local";
import useClient from "@/hooks/useClient"; import useClient from "@/hooks/useClient";
import {useQuery} from "@tanstack/react-query"; import {useQuery} from "@tanstack/react-query";
import LocalAPI from "@/service/localAPI"; import LocalAPI from "@/service/localAPI";
import Head from "next/head";
const Hero = () => { const Hero = () => {
return ( return (
@ -359,6 +360,10 @@ const ArticlesSlider = () => {
export default function Home() { export default function Home() {
return ( return (
<> <>
<Head>
<title>Relynolli купить моторное масло на официальном сайте российского производителя по выгодной цене</title>
<meta name={"description"} content={"Официальный сайт производителя моторного масла Relynolli ®. Российское автомобильное масло Релиноли важнейшая «деталь» двигателя вашего автомобиля. Купить в интернет-магазине оптом и в розницу."}/>
</Head>
<Hero/> <Hero/>
<MainInfo/> <MainInfo/>
<Achievements/> <Achievements/>

View File

@ -6,6 +6,7 @@ import {News} from "@/service/types/local";
import {WrapperDark} from "@/components/reusable/wrapper"; import {WrapperDark} from "@/components/reusable/wrapper";
import {Skeleton} from "@nextui-org/react"; import {Skeleton} from "@nextui-org/react";
import Link from "next/link"; import Link from "next/link";
import Head from "next/head";
const NewsCard = (props: News) => { const NewsCard = (props: News) => {
return ( return (
@ -37,20 +38,28 @@ const News = () => {
}) })
return ( return (
<WrapperDark title={"Новости"} breadcrumbs={[{name: "Новости", link: "/news"}]}> <>
<Head>
<title>Новости Relynolli актуальная информация о бренде, публикации в СМИ</title>
<meta name="description" content="Все новости от бренда моторных масел Relynolli: акции, актуальная информация, видео и публикации в СМИ. Узнайте о профильных мероприятиях с участием Релиноли и ТД ТЕХНОХИМ ГРУПП."/>
</Head>
<WrapperDark title={"Новости"} breadcrumbs={[{name: "Новости", link: "/news"}]}>
<div className="news-container grid grid-cols-1 lg:grid-cols-3 gap-5"> <div className="news-container grid grid-cols-1 lg:grid-cols-3 gap-5">
{ {
queryNews.data && queryNews.data.data!.map(news => <NewsCard key={news.id} {...news}/>) queryNews.data && queryNews.data.data!.map(news => <NewsCard key={news.id} {...news}/>)
} }
{ {
queryNews.isFetching && Array(10).fill(0).map((_, index) => <Skeleton key={index} className={"rounded-[20px] !bg-gray-3"}> queryNews.isFetching && Array(10).fill(0).map((_, index) => <Skeleton key={index} className={"rounded-[20px] !bg-gray-3"}>
<div className="w-full h-64 "></div> <div className="w-full h-64 "></div>
</Skeleton> ) </Skeleton> )
} }
</div>
</WrapperDark>
</>
)
</div>
</WrapperDark>)
} }

View File

@ -53,7 +53,7 @@ const Support = () => {
на все Ваши вопросы!</p> на все Ваши вопросы!</p>
<Button className="text-black text-xl font-extrabold h-[70px] uppercase gap-5 " <Button className="text-black text-xl font-extrabold h-[70px] uppercase gap-5 "
color={"primary"} color={"primary"}
href={""} href={"https://yandex.ru/business/widget/request/company/32353164529"}
as={Link} as={Link}
endContent={<ChevronBannerIcon className={"stroke-[3px] stroke-black"}/>}> endContent={<ChevronBannerIcon className={"stroke-[3px] stroke-black"}/>}>
<i>Задать вопрос</i> <i>Задать вопрос</i>