add metatags
parent
3850c55b44
commit
2c7d2e7738
|
@ -0,0 +1,7 @@
|
||||||
|
services:
|
||||||
|
client:
|
||||||
|
image: 80.249.144.200:5000/relynolli_client:latest-amd
|
||||||
|
platform: linux/amd64
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)}
|
||||||
|
|
|
@ -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>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -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&source=constructor" width="100%" height="500"></iframe>
|
<iframe className={"rounded-[20px] mb-24"} src="https://yandex.ru/map-widget/v1/?um=constructor%3Aa9c71bba18ffe78a2028d1851bd205ecebc04063c76af8dedab6bceff5c73b24&source=constructor" width="100%" height="500"></iframe>
|
||||||
|
|
||||||
|
@ -576,6 +584,7 @@ const Contact = () => {
|
||||||
|
|
||||||
|
|
||||||
</Wrapper>
|
</Wrapper>
|
||||||
|
</>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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/>
|
||||||
|
|
|
@ -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: "/news"}]}>
|
<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">
|
||||||
|
@ -50,7 +56,10 @@ const News = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</WrapperDark>)
|
</WrapperDark>
|
||||||
|
</>
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue