-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSEO.tsx
More file actions
95 lines (80 loc) · 3.1 KB
/
SEO.tsx
File metadata and controls
95 lines (80 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import React, { useEffect } from 'react';
import seoConfig from '../config/seoConfig';
interface SEOProps {
title: string;
description: string;
keywords?: string;
canonical?: string;
ogType?: string;
ogImage?: string;
twitterCard?: string;
}
const SEO: React.FC<SEOProps> = ({
title,
description,
keywords,
canonical,
ogType = 'website',
ogImage = '/og-image.jpg',
twitterCard = 'summary_large_image'
}) => {
const siteUrl = seoConfig.siteUrl;
const fullTitle = `${title} | DevMorphix`;
const fullCanonical = canonical ? `${siteUrl}${canonical}` : siteUrl;
useEffect(() => {
// Set document title
document.title = fullTitle;
// Helper function to update or create meta tags
const setMetaTag = (property: string, content: string, isProperty = false) => {
const attr = isProperty ? 'property' : 'name';
let element = document.querySelector(`meta[${attr}="${property}"]`);
if (!element) {
element = document.createElement('meta');
element.setAttribute(attr, property);
document.head.appendChild(element);
}
element.setAttribute('content', content);
};
// Helper function to update or create link tags
const setLinkTag = (rel: string, href: string) => {
let element = document.querySelector(`link[rel="${rel}"]`) as HTMLLinkElement;
if (!element) {
element = document.createElement('link');
element.setAttribute('rel', rel);
document.head.appendChild(element);
}
element.setAttribute('href', href);
};
// Primary Meta Tags
setMetaTag('title', fullTitle);
setMetaTag('description', description);
if (keywords) setMetaTag('keywords', keywords);
setLinkTag('canonical', fullCanonical);
// Open Graph / Facebook
setMetaTag('og:type', ogType, true);
setMetaTag('og:url', fullCanonical, true);
setMetaTag('og:title', fullTitle, true);
setMetaTag('og:description', description, true);
setMetaTag('og:image', `${siteUrl}${ogImage}`, true);
setMetaTag('og:site_name', 'DevMorphix', true);
setMetaTag('og:locale', 'en_IN', true);
// Twitter
setMetaTag('twitter:card', twitterCard);
setMetaTag('twitter:url', fullCanonical);
setMetaTag('twitter:title', fullTitle);
setMetaTag('twitter:description', description);
setMetaTag('twitter:image', `${siteUrl}${ogImage}`);
setMetaTag('twitter:site', seoConfig.twitterUsername);
// Additional SEO Meta Tags
setMetaTag('robots', 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1');
setMetaTag('googlebot', 'index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1');
setMetaTag('language', 'English');
setMetaTag('geo.region', 'IN-KL');
setMetaTag('geo.placename', 'Changanacherry, Kottayam, Alappuzha, Kerala');
setMetaTag('geo.position', '9.4425;76.5476');
setMetaTag('ICBM', '9.4425, 76.5476');
setMetaTag('author', 'DevMorphix');
}, [title, description, keywords, fullTitle, fullCanonical, ogType, ogImage, twitterCard, siteUrl]);
return null;
};
export default SEO;