summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-03-29 17:02:57 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-03-29 17:02:57 +0700
commit72329fb20c3bc7703590b85bd0c42ea32e7cfe61 (patch)
treea5ad3074010154cf6d105a81f1175da844c0a798 /src
parent0d42449cdd6e53cb8e98555660aefee81997a9d3 (diff)
SEO
Diffstat (limited to 'src')
-rw-r--r--src/core/components/Seo.jsx33
-rw-r--r--src/pages/_document.jsx62
-rw-r--r--src/pages/about-us.jsx3
-rw-r--r--src/pages/activate.jsx2
-rw-r--r--src/pages/blog/[slug].jsx3
-rw-r--r--src/pages/blog/index.jsx3
-rw-r--r--src/pages/contact-us.jsx2
-rw-r--r--src/pages/faqs.jsx2
-rw-r--r--src/pages/index.jsx7
-rw-r--r--src/pages/login.jsx3
-rw-r--r--src/pages/register.jsx3
-rw-r--r--src/pages/shop/brands/[slug].jsx15
-rw-r--r--src/pages/shop/brands/index.jsx3
-rw-r--r--src/pages/shop/cart.jsx3
-rw-r--r--src/pages/shop/checkout/[status].jsx15
-rw-r--r--src/pages/shop/checkout/index.jsx29
-rw-r--r--src/pages/shop/product/[slug].jsx18
-rw-r--r--src/pages/shop/quotation/finish.jsx5
-rw-r--r--src/pages/shop/quotation/index.jsx29
-rw-r--r--src/pages/shop/search.jsx3
-rw-r--r--src/pages/video.jsx3
21 files changed, 206 insertions, 40 deletions
diff --git a/src/core/components/Seo.jsx b/src/core/components/Seo.jsx
index e688077e..0e224c19 100644
--- a/src/core/components/Seo.jsx
+++ b/src/core/components/Seo.jsx
@@ -1,10 +1,33 @@
-import Head from 'next/head'
+import { NextSeo } from 'next-seo'
+import { useRouter } from 'next/router'
+
+const Seo = ({ ...props }) => {
+ const router = useRouter()
+
+ const { additionalMetaTags = [], openGraph = [], title = '' } = props
-const Seo = ({ title }) => {
return (
- <Head>
- <title>{title}</title>
- </Head>
+ <NextSeo
+ defaultTitle='Indoteknik.com: B2B Industrial Supply & Solution'
+ canonical={process.env.NEXT_PUBLIC_SELF_HOST + router.asPath}
+ description={title}
+ {...props}
+ openGraph={{
+ siteName: 'Indoteknik.com',
+ ...openGraph
+ }}
+ additionalMetaTags={[
+ {
+ property: 'fb:app_id',
+ content: '270830718811'
+ },
+ {
+ property: 'fb:page_id',
+ content: '101759953569'
+ },
+ ...additionalMetaTags
+ ]}
+ />
)
}
diff --git a/src/pages/_document.jsx b/src/pages/_document.jsx
index bff2b1b2..ff205a38 100644
--- a/src/pages/_document.jsx
+++ b/src/pages/_document.jsx
@@ -1,9 +1,67 @@
import { Html, Head, Main, NextScript } from 'next/document'
+import Script from 'next/script'
-export default function Document() {
+export default function MyDocument() {
return (
<Html>
- <Head />
+ <Head>
+ <meta name='facebook-domain-verification' content='328wmjs7hcnz74rwsqzxvq50rmbtm2' />
+ <Script
+ async
+ strategy='beforeInteractive'
+ src='https://www.googletagmanager.com/gtag/js?id=UA-10501937-1'
+ />
+
+ <Script
+ id='google-analytics-ua'
+ strategy='beforeInteractive'
+ dangerouslySetInnerHTML={{
+ __html: `
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'UA-10501937-1');
+ `
+ }}
+ />
+
+ <Script
+ async
+ strategy='beforeInteractive'
+ src='https://www.googletagmanager.com/gtag/js?id=G-G1W8MNZ11P'
+ />
+
+ <Script
+ id='google-analytics-ga'
+ strategy='beforeInteractive'
+ dangerouslySetInnerHTML={{
+ __html: `
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'G-G1W8MNZ11P');
+ `
+ }}
+ />
+
+ <Script
+ id='google-tag-manager'
+ 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-PHRB7RP');
+ `
+ }}
+ />
+
+ <meta
+ name='google-site-verification'
+ content='uHuW_mZhjv_fUg3do-lV8Mo7R2vVjF4MPQhTXFP3jH4'
+ />
+ </Head>
<body>
<Main />
<NextScript />
diff --git a/src/pages/about-us.jsx b/src/pages/about-us.jsx
index 9c9c8baf..207f265d 100644
--- a/src/pages/about-us.jsx
+++ b/src/pages/about-us.jsx
@@ -1,9 +1,12 @@
+import Seo from '@/core/components/Seo'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import PageContent from '@/lib/content/components/PageContent'
export default function AboutUs() {
return (
<BasicLayout>
+ <Seo title='Tentang Indoteknik.com' />
+
<div className='container mx-auto p-4 md:p-0 my-0 md:my-10'>
<PageContent path='/about-us' />
</div>
diff --git a/src/pages/activate.jsx b/src/pages/activate.jsx
index cbd10ac2..7f4b6056 100644
--- a/src/pages/activate.jsx
+++ b/src/pages/activate.jsx
@@ -1,9 +1,11 @@
+import Seo from '@/core/components/Seo'
import SimpleFooter from '@/core/components/elements/Footer/SimpleFooter'
import ActivateComponent from '@/lib/auth/components/Activate'
export default function Activate() {
return (
<>
+ <Seo title='Aktivasi Akun Indoteknik.com' />
<ActivateComponent />
<SimpleFooter />
</>
diff --git a/src/pages/blog/[slug].jsx b/src/pages/blog/[slug].jsx
index b85a83d2..257f9385 100644
--- a/src/pages/blog/[slug].jsx
+++ b/src/pages/blog/[slug].jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import Link from '@/core/components/elements/Link/Link'
import Spinner from '@/core/components/elements/Spinner/Spinner'
import BasicLayout from '@/core/components/layouts/BasicLayout'
@@ -36,6 +37,8 @@ export default function BlogDetail() {
return (
<BasicLayout>
+ <Seo title={`${blog.data?.title} - Indoteknik.com`} />
+
{blog.isLoading && (
<div className='flex justify-center my-6'>
<Spinner className='w-6 text-gray_r-12/50 fill-gray_r-12' />
diff --git a/src/pages/blog/index.jsx b/src/pages/blog/index.jsx
index 1ce5a482..c65fe07d 100644
--- a/src/pages/blog/index.jsx
+++ b/src/pages/blog/index.jsx
@@ -6,6 +6,7 @@ import useBlogs from '@/lib/blog/hooks/useBlogs'
import { useRouter } from 'next/router'
import Pagination from '@/core/components/elements/Pagination/Pagination'
import Spinner from '@/core/components/elements/Spinner/Spinner'
+import Seo from '@/core/components/Seo'
export default function Blogs() {
const router = useRouter()
@@ -18,6 +19,8 @@ export default function Blogs() {
return (
<BasicLayout>
+ <Seo title='Blogs Indoteknik.com' />
+
{blogs.isLoading && (
<div className='flex justify-center my-6'>
<Spinner className='w-6 text-gray_r-12/50 fill-gray_r-12' />
diff --git a/src/pages/contact-us.jsx b/src/pages/contact-us.jsx
index 71f816db..adbf9439 100644
--- a/src/pages/contact-us.jsx
+++ b/src/pages/contact-us.jsx
@@ -1,9 +1,11 @@
+import Seo from '@/core/components/Seo'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import PageContent from '@/lib/content/components/PageContent'
export default function ContactUs() {
return (
<BasicLayout>
+ <Seo title='Hubungi Indoteknik.com' />
<PageContent path='/contact-us' />
</BasicLayout>
)
diff --git a/src/pages/faqs.jsx b/src/pages/faqs.jsx
index ec7a4b47..e8ffb4e3 100644
--- a/src/pages/faqs.jsx
+++ b/src/pages/faqs.jsx
@@ -1,9 +1,11 @@
+import Seo from '@/core/components/Seo'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import PageContent from '@/lib/content/components/PageContent'
export default function ContactUs() {
return (
<BasicLayout>
+ <Seo title='FAQS Indoteknik.com' />
<PageContent path='/faqs' />
</BasicLayout>
)
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index 99f94ee1..1102cc1b 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -5,6 +5,7 @@ import MobileView from '@/core/components/views/MobileView'
import DesktopView from '@/core/components/views/DesktopView'
import { useRef } from 'react'
import { NextSeo } from 'next-seo'
+import Seo from '@/core/components/Seo'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
@@ -35,18 +36,18 @@ export default function Home() {
return (
<BasicLayout>
- <NextSeo
+ <Seo
title='Indoteknik.com: B2B Industrial Supply & Solution'
description='Temukan pilihan produk B2B Industri &amp; Alat Teknik untuk Perusahaan, UMKM &amp; Pemerintah dengan lengkap, mudah dan transparan.'
- canonical={process.env.NEXT_PUBLIC_SELF_HOST}
additionalMetaTags={[
{
- property: 'keywords',
+ name: 'keywords',
content:
'indoteknik, indoteknik.com, toko teknik, toko perkakas, jual genset, jual fogging, jual krisbow, harga krisbow, harga alat safety, harga pompa air'
}
]}
/>
+
<DesktopView>
<div className='container mx-auto'>
<div className='flex h-[360px]' ref={wrapperRef} onLoad={handleOnLoad}>
diff --git a/src/pages/login.jsx b/src/pages/login.jsx
index bd7ec5c1..38174f84 100644
--- a/src/pages/login.jsx
+++ b/src/pages/login.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import SimpleFooter from '@/core/components/elements/Footer/SimpleFooter'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import DesktopView from '@/core/components/views/DesktopView'
@@ -7,6 +8,8 @@ import LoginComponent from '@/lib/auth/components/Login'
export default function Login() {
return (
<>
+ <Seo title='Login - Indoteknik.com' />
+
<DesktopView>
<BasicLayout>
<LoginComponent />
diff --git a/src/pages/register.jsx b/src/pages/register.jsx
index 7f5e9f2b..a2fbbf94 100644
--- a/src/pages/register.jsx
+++ b/src/pages/register.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import SimpleFooter from '@/core/components/elements/Footer/SimpleFooter'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import DesktopView from '@/core/components/views/DesktopView'
@@ -7,6 +8,8 @@ import RegisterComponent from '@/lib/auth/components/Register'
export default function Register() {
return (
<>
+ <Seo title='Register - Indoteknik.com' />
+
<DesktopView>
<BasicLayout>
<RegisterComponent />
diff --git a/src/pages/shop/brands/[slug].jsx b/src/pages/shop/brands/[slug].jsx
index 33f81fa2..9c5193ad 100644
--- a/src/pages/shop/brands/[slug].jsx
+++ b/src/pages/shop/brands/[slug].jsx
@@ -2,6 +2,7 @@ import dynamic from 'next/dynamic'
import { getIdFromSlug, getNameFromSlug } from '@/core/utils/slug'
import { useRouter } from 'next/router'
import _ from 'lodash'
+import Seo from '@/core/components/Seo'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const ProductSearch = dynamic(() => import('@/lib/product/components/ProductSearch'))
@@ -10,8 +11,22 @@ const Brand = dynamic(() => import('@/lib/brand/components/Brand'))
export default function BrandDetail() {
const router = useRouter()
const { slug = '' } = router.query
+
+ const brandName = getNameFromSlug(slug)
return (
<BasicLayout>
+ <Seo
+ title={`Distributor ${brandName} Indonesia Harga Official Indoteknik.com`}
+ description='B2B Marketplace MRO &amp; Industri dengan Layanan Pembayaran Tempo, Faktur Pajak, Online Quotation, Garansi Resmi &amp; Harga Kompetitif'
+ additionalMetaTags={[
+ {
+ property: 'keywords',
+ content:
+ `Jual ${brandName}, beli ${brandName}, Distributor ${brandName} Indonesia, cari ${brandName}, produk ${brandName}, ${brandName} Indonesia, harga ${brandName}`
+ }
+ ]}
+ />
+
<Brand id={getIdFromSlug(slug)} />
{!_.isEmpty(router.query) && (
<ProductSearch
diff --git a/src/pages/shop/brands/index.jsx b/src/pages/shop/brands/index.jsx
index 77fde173..8159c965 100644
--- a/src/pages/shop/brands/index.jsx
+++ b/src/pages/shop/brands/index.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import DesktopView from '@/core/components/views/DesktopView'
import MobileView from '@/core/components/views/MobileView'
@@ -6,6 +7,8 @@ import BrandsComponent from '@/lib/brand/components/Brands'
export default function Brands() {
return (
<BasicLayout>
+ <Seo title='Brands Indoteknik.com' />
+
<MobileView>
<BrandsComponent />
</MobileView>
diff --git a/src/pages/shop/cart.jsx b/src/pages/shop/cart.jsx
index 9566cfcb..e574f14d 100644
--- a/src/pages/shop/cart.jsx
+++ b/src/pages/shop/cart.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import DesktopView from '@/core/components/views/DesktopView'
import MobileView from '@/core/components/views/MobileView'
@@ -9,6 +10,8 @@ const CartComponent = dynamic(() => import('@/lib/cart/components/Cart'))
export default function Cart() {
return (
<>
+ <Seo title='Keranjang Belanja Indoteknik.com' />
+
<MobileView>
<AppLayout title='Keranjang' withFooter={false}>
<CartComponent />
diff --git a/src/pages/shop/checkout/[status].jsx b/src/pages/shop/checkout/[status].jsx
index bf184c0e..7c39718c 100644
--- a/src/pages/shop/checkout/[status].jsx
+++ b/src/pages/shop/checkout/[status].jsx
@@ -3,6 +3,7 @@ import IsAuth from '@/lib/auth/components/IsAuth'
import FinishCheckoutComponent from '@/lib/checkout/components/FinishCheckout'
import { useRouter } from 'next/router'
import axios from 'axios'
+import Seo from '@/core/components/Seo'
export async function getServerSideProps(context) {
const { order_id } = context.query
@@ -18,10 +19,14 @@ export default function Finish() {
const router = useRouter()
return (
- <IsAuth>
- <BasicLayout>
- <FinishCheckoutComponent query={router.query || {}} />
- </BasicLayout>
- </IsAuth>
+ <>
+ <Seo title='Checkout Indoteknik.com' />
+
+ <IsAuth>
+ <BasicLayout>
+ <FinishCheckoutComponent query={router.query || {}} />
+ </BasicLayout>
+ </IsAuth>
+ </>
)
}
diff --git a/src/pages/shop/checkout/index.jsx b/src/pages/shop/checkout/index.jsx
index 30d2c730..13fc7056 100644
--- a/src/pages/shop/checkout/index.jsx
+++ b/src/pages/shop/checkout/index.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import AppLayout from '@/core/components/layouts/AppLayout'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import DesktopView from '@/core/components/views/DesktopView'
@@ -7,18 +8,22 @@ import CheckoutComponent from '@/lib/checkout/components/Checkout'
export default function Checkout() {
return (
- <IsAuth>
- <MobileView>
- <AppLayout title='Checkout'>
- <CheckoutComponent />
- </AppLayout>
- </MobileView>
+ <>
+ <Seo title='Checkout Indoteknik.com' />
- <DesktopView>
- <BasicLayout>
- <CheckoutComponent />
- </BasicLayout>
- </DesktopView>
- </IsAuth>
+ <IsAuth>
+ <MobileView>
+ <AppLayout title='Checkout'>
+ <CheckoutComponent />
+ </AppLayout>
+ </MobileView>
+
+ <DesktopView>
+ <BasicLayout>
+ <CheckoutComponent />
+ </BasicLayout>
+ </DesktopView>
+ </IsAuth>
+ </>
)
}
diff --git a/src/pages/shop/product/[slug].jsx b/src/pages/shop/product/[slug].jsx
index e8084cbe..84b848f0 100644
--- a/src/pages/shop/product/[slug].jsx
+++ b/src/pages/shop/product/[slug].jsx
@@ -2,6 +2,7 @@ import Seo from '@/core/components/Seo'
import { getIdFromSlug } from '@/core/utils/slug'
import productApi from '@/lib/product/api/productApi'
import dynamic from 'next/dynamic'
+import { useRouter } from 'next/router'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const Product = dynamic(() => import('@/lib/product/components/Product/Product'))
@@ -23,9 +24,24 @@ export async function getServerSideProps(context) {
}
export default function ProductDetail({ product }) {
+ const router = useRouter()
return (
<BasicLayout>
- <Seo title={product?.name} />
+ <Seo
+ title={product?.name + ' - Indoteknik.com' || ''}
+ description='Temukan pilihan produk B2B Industri &amp; Alat Teknik untuk Perusahaan, UMKM &amp; Pemerintah dengan lengkap, mudah dan transparan.'
+ openGraph={{
+ url: process.env.NEXT_PUBLIC_SELF_HOST + router.asPath,
+ image: product.image,
+ type: 'product'
+ }}
+ additionalMetaTags={[
+ {
+ name: 'keywords',
+ content: `${product.name}, Harga ${product.name}, Beli ${product.name}, Spesifikasi ${product.name}`
+ }
+ ]}
+ />
<Product product={product} />
</BasicLayout>
)
diff --git a/src/pages/shop/quotation/finish.jsx b/src/pages/shop/quotation/finish.jsx
index 32638b62..52e03cf6 100644
--- a/src/pages/shop/quotation/finish.jsx
+++ b/src/pages/shop/quotation/finish.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import Link from '@/core/components/elements/Link/Link'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import useAuth from '@/core/hooks/useAuth'
@@ -10,6 +11,9 @@ export default function FinishQuotation() {
const router = useRouter()
const { id } = router.query
return (
+ <>
+ <Seo title='Quotation Indoteknik.com' />
+
<IsAuth>
<BasicLayout>
<div className='mx-auto container'>
@@ -39,5 +43,6 @@ export default function FinishQuotation() {
</div>
</BasicLayout>
</IsAuth>
+ </>
)
}
diff --git a/src/pages/shop/quotation/index.jsx b/src/pages/shop/quotation/index.jsx
index efb35db9..bd086b72 100644
--- a/src/pages/shop/quotation/index.jsx
+++ b/src/pages/shop/quotation/index.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import AppLayout from '@/core/components/layouts/AppLayout'
import BasicLayout from '@/core/components/layouts/BasicLayout'
import DesktopView from '@/core/components/views/DesktopView'
@@ -7,18 +8,22 @@ import QuotationComponent from '@/lib/quotation/components/Quotation'
export default function Quotation() {
return (
- <IsAuth>
- <MobileView>
- <AppLayout title='Quotation'>
- <QuotationComponent />
- </AppLayout>
- </MobileView>
+ <>
+ <Seo title='Quotation Indoteknik.com' />
- <DesktopView>
- <BasicLayout>
- <QuotationComponent />
- </BasicLayout>
- </DesktopView>
- </IsAuth>
+ <IsAuth>
+ <MobileView>
+ <AppLayout title='Quotation'>
+ <QuotationComponent />
+ </AppLayout>
+ </MobileView>
+
+ <DesktopView>
+ <BasicLayout>
+ <QuotationComponent />
+ </BasicLayout>
+ </DesktopView>
+ </IsAuth>
+ </>
)
}
diff --git a/src/pages/shop/search.jsx b/src/pages/shop/search.jsx
index 345b715a..d21d72cd 100644
--- a/src/pages/shop/search.jsx
+++ b/src/pages/shop/search.jsx
@@ -1,6 +1,7 @@
import dynamic from 'next/dynamic'
import { useRouter } from 'next/router'
import _ from 'lodash-contrib'
+import Seo from '@/core/components/Seo'
const BasicLayout = dynamic(() => import('@/core/components/layouts/BasicLayout'))
const ProductSearch = dynamic(() => import('@/lib/product/components/ProductSearch'))
@@ -10,6 +11,8 @@ export default function Search() {
return (
<BasicLayout>
+ <Seo title={`Cari produk ${router.query.q} di Indoteknik.com`} />
+
{!_.isEmpty(router.query) && (
<ProductSearch
query={router.query}
diff --git a/src/pages/video.jsx b/src/pages/video.jsx
index bfd4a126..7a2a5ecc 100644
--- a/src/pages/video.jsx
+++ b/src/pages/video.jsx
@@ -1,3 +1,4 @@
+import Seo from '@/core/components/Seo'
import Pagination from '@/core/components/elements/Pagination/Pagination'
import Spinner from '@/core/components/elements/Spinner/Spinner'
import BasicLayout from '@/core/components/layouts/BasicLayout'
@@ -16,6 +17,8 @@ export default function Video() {
return (
<BasicLayout>
+ <Seo title='Kanal Video Indoteknik.com' />
+
{video.isLoading && (
<div className='flex justify-center my-6'>
<Spinner className='w-6 text-gray_r-12/50 fill-gray_r-12' />