summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/components/Seo.jsx78
1 files changed, 55 insertions, 23 deletions
diff --git a/src/core/components/Seo.jsx b/src/core/components/Seo.jsx
index 0e224c19..66da395b 100644
--- a/src/core/components/Seo.jsx
+++ b/src/core/components/Seo.jsx
@@ -1,34 +1,66 @@
-import { NextSeo } from 'next-seo'
-import { useRouter } from 'next/router'
+import { useRouter } from 'next/router';
+import { NextSeo } from 'next-seo';
-const Seo = ({ ...props }) => {
- const router = useRouter()
+const Seo = (props) => {
+ const router = useRouter();
- const { additionalMetaTags = [], openGraph = [], title = '' } = props
+ const {
+ canonical,
+ description,
+ additionalMetaTags = [],
+ openGraph = {},
+ ...restProps
+ } = props;
+
+ const origin = (process.env.NEXT_PUBLIC_SELF_HOST || '').replace(/\/+$/, '');
+
+ const asPath = router.asPath || '';
+
+ const [cleanPath] = asPath.split('?');
+
+ const queryObj = router.query || {};
+
+ const isSearchPage = cleanPath.startsWith('/search');
+
+ const buildFallbackCanonical = () => {
+ if (isSearchPage) {
+ const q = queryObj.q;
+ if (q) {
+ return origin + cleanPath + `?q=${encodeURIComponent(String(q))}`;
+ }
+ return origin + cleanPath;
+ }
+
+ return origin + cleanPath;
+ };
+
+ const resolvedCanonical = canonical || buildFallbackCanonical();
+
+ const mergedAdditionalMetaTags = [
+ {
+ property: 'fb:app_id',
+ content: '270830718811',
+ },
+ {
+ property: 'fb:page_id',
+ content: '101759953569',
+ },
+ ...additionalMetaTags,
+ ];
return (
<NextSeo
defaultTitle='Indoteknik.com: B2B Industrial Supply & Solution'
- canonical={process.env.NEXT_PUBLIC_SELF_HOST + router.asPath}
- description={title}
- {...props}
+ canonical={resolvedCanonical}
+ description={description}
+ {...restProps}
openGraph={{
siteName: 'Indoteknik.com',
- ...openGraph
+ ...openGraph,
}}
- additionalMetaTags={[
- {
- property: 'fb:app_id',
- content: '270830718811'
- },
- {
- property: 'fb:page_id',
- content: '101759953569'
- },
- ...additionalMetaTags
- ]}
+ additionalMetaTags={mergedAdditionalMetaTags}
/>
- )
-}
+ );
+};
-export default Seo
+export default Seo;