@xbg.solutions/bpsk-utils-seo 1.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +4 -0
- package/lib/index.js.map +1 -0
- package/lib/utils/seo.d.ts +96 -0
- package/lib/utils/seo.d.ts.map +1 -0
- package/lib/utils/seo.js +357 -0
- package/lib/utils/seo.js.map +1 -0
- package/package.json +24 -0
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,aAAa,CAAC"}
|
package/lib/index.js
ADDED
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6BAA6B;AAE7B,QAAQ;AACR,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEO Optimization Utilities
|
|
3
|
+
*
|
|
4
|
+
* Tools for improving search engine optimization
|
|
5
|
+
*/
|
|
6
|
+
export interface MetaTag {
|
|
7
|
+
name?: string;
|
|
8
|
+
property?: string;
|
|
9
|
+
content: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SEOData {
|
|
12
|
+
title: string;
|
|
13
|
+
description: string;
|
|
14
|
+
keywords?: string[];
|
|
15
|
+
canonical?: string;
|
|
16
|
+
image?: string;
|
|
17
|
+
type?: 'website' | 'article' | 'product' | 'profile';
|
|
18
|
+
author?: string;
|
|
19
|
+
publishedTime?: string;
|
|
20
|
+
modifiedTime?: string;
|
|
21
|
+
siteName?: string;
|
|
22
|
+
locale?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate meta tags for SEO
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateMetaTags(data: SEOData): MetaTag[];
|
|
28
|
+
/**
|
|
29
|
+
* Generate structured data (JSON-LD) for SEO
|
|
30
|
+
*/
|
|
31
|
+
export declare function generateStructuredData(data: SEOData & {
|
|
32
|
+
url?: string;
|
|
33
|
+
logo?: string;
|
|
34
|
+
contactPoint?: {
|
|
35
|
+
telephone: string;
|
|
36
|
+
contactType: string;
|
|
37
|
+
areaServed: string;
|
|
38
|
+
};
|
|
39
|
+
sameAs?: string[];
|
|
40
|
+
}): any;
|
|
41
|
+
/**
|
|
42
|
+
* SEO audit function
|
|
43
|
+
*/
|
|
44
|
+
export declare function auditSEO(): {
|
|
45
|
+
score: number;
|
|
46
|
+
issues: string[];
|
|
47
|
+
recommendations: string[];
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* Generate sitemap XML
|
|
51
|
+
*/
|
|
52
|
+
export declare function generateSitemapXML(urls: Array<{
|
|
53
|
+
url: string;
|
|
54
|
+
lastModified?: string;
|
|
55
|
+
changeFreq?: 'always' | 'hourly' | 'daily' | 'weekly' | 'monthly' | 'yearly' | 'never';
|
|
56
|
+
priority?: number;
|
|
57
|
+
}>): string;
|
|
58
|
+
/**
|
|
59
|
+
* Generate robots.txt content
|
|
60
|
+
*/
|
|
61
|
+
export declare function generateRobotsTxt(config: {
|
|
62
|
+
sitemap?: string;
|
|
63
|
+
disallow?: string[];
|
|
64
|
+
allow?: string[];
|
|
65
|
+
crawlDelay?: number;
|
|
66
|
+
}): string;
|
|
67
|
+
/**
|
|
68
|
+
* SEO utilities for development
|
|
69
|
+
*/
|
|
70
|
+
export declare const seoUtils: {
|
|
71
|
+
/**
|
|
72
|
+
* Log SEO audit results
|
|
73
|
+
*/
|
|
74
|
+
logAudit(): void;
|
|
75
|
+
/**
|
|
76
|
+
* Preview how page appears in search results
|
|
77
|
+
*/
|
|
78
|
+
previewSearchResult(): {
|
|
79
|
+
title: string;
|
|
80
|
+
url: string;
|
|
81
|
+
description: string;
|
|
82
|
+
} | null;
|
|
83
|
+
/**
|
|
84
|
+
* Get page insights for SEO
|
|
85
|
+
*/
|
|
86
|
+
getPageInsights(): {
|
|
87
|
+
wordCount: number;
|
|
88
|
+
readingTime: number;
|
|
89
|
+
headingStructure: {
|
|
90
|
+
[key: string]: number;
|
|
91
|
+
};
|
|
92
|
+
internalLinks: number;
|
|
93
|
+
externalLinks: number;
|
|
94
|
+
} | null;
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=seo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/utils/seo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,CA4DzD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,GAAG,GAAG,CAyCN;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CA2IA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,KAAK,CAAC;IAC7C,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,GAAG,MAAM,CAeV;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CA4BT;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ;IACnB;;OAEG;gBACS,IAAI;IAsBhB;;OAEG;2BACoB;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI;IAcR;;OAEG;uBACgB;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAC;QAC5C,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,GAAG,IAAI;CAsCT,CAAC"}
|
package/lib/utils/seo.js
ADDED
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SEO Optimization Utilities
|
|
3
|
+
*
|
|
4
|
+
* Tools for improving search engine optimization
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Generate meta tags for SEO
|
|
8
|
+
*/
|
|
9
|
+
export function generateMetaTags(data) {
|
|
10
|
+
const tags = [];
|
|
11
|
+
// Basic meta tags
|
|
12
|
+
if (data.description) {
|
|
13
|
+
tags.push({ name: 'description', content: data.description });
|
|
14
|
+
}
|
|
15
|
+
if (data.keywords && data.keywords.length > 0) {
|
|
16
|
+
tags.push({ name: 'keywords', content: data.keywords.join(', ') });
|
|
17
|
+
}
|
|
18
|
+
if (data.author) {
|
|
19
|
+
tags.push({ name: 'author', content: data.author });
|
|
20
|
+
}
|
|
21
|
+
// Open Graph tags
|
|
22
|
+
tags.push({ property: 'og:title', content: data.title });
|
|
23
|
+
tags.push({ property: 'og:description', content: data.description });
|
|
24
|
+
tags.push({ property: 'og:type', content: data.type || 'website' });
|
|
25
|
+
if (data.image) {
|
|
26
|
+
tags.push({ property: 'og:image', content: data.image });
|
|
27
|
+
tags.push({ property: 'og:image:alt', content: data.title });
|
|
28
|
+
}
|
|
29
|
+
if (data.canonical) {
|
|
30
|
+
tags.push({ property: 'og:url', content: data.canonical });
|
|
31
|
+
}
|
|
32
|
+
if (data.siteName) {
|
|
33
|
+
tags.push({ property: 'og:site_name', content: data.siteName });
|
|
34
|
+
}
|
|
35
|
+
if (data.locale) {
|
|
36
|
+
tags.push({ property: 'og:locale', content: data.locale });
|
|
37
|
+
}
|
|
38
|
+
if (data.publishedTime) {
|
|
39
|
+
tags.push({ property: 'article:published_time', content: data.publishedTime });
|
|
40
|
+
}
|
|
41
|
+
if (data.modifiedTime) {
|
|
42
|
+
tags.push({ property: 'article:modified_time', content: data.modifiedTime });
|
|
43
|
+
}
|
|
44
|
+
if (data.author && data.type === 'article') {
|
|
45
|
+
tags.push({ property: 'article:author', content: data.author });
|
|
46
|
+
}
|
|
47
|
+
// Twitter Card tags
|
|
48
|
+
tags.push({ name: 'twitter:card', content: 'summary_large_image' });
|
|
49
|
+
tags.push({ name: 'twitter:title', content: data.title });
|
|
50
|
+
tags.push({ name: 'twitter:description', content: data.description });
|
|
51
|
+
if (data.image) {
|
|
52
|
+
tags.push({ name: 'twitter:image', content: data.image });
|
|
53
|
+
}
|
|
54
|
+
return tags;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate structured data (JSON-LD) for SEO
|
|
58
|
+
*/
|
|
59
|
+
export function generateStructuredData(data) {
|
|
60
|
+
const baseSchema = {
|
|
61
|
+
'@context': 'https://schema.org',
|
|
62
|
+
'@type': data.type === 'article' ? 'Article' : 'WebPage',
|
|
63
|
+
name: data.title,
|
|
64
|
+
headline: data.title,
|
|
65
|
+
description: data.description,
|
|
66
|
+
url: data.url || data.canonical,
|
|
67
|
+
datePublished: data.publishedTime,
|
|
68
|
+
dateModified: data.modifiedTime || data.publishedTime,
|
|
69
|
+
};
|
|
70
|
+
if (data.image) {
|
|
71
|
+
baseSchema.image = {
|
|
72
|
+
'@type': 'ImageObject',
|
|
73
|
+
url: data.image,
|
|
74
|
+
alt: data.title
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
if (data.author) {
|
|
78
|
+
baseSchema.author = {
|
|
79
|
+
'@type': 'Person',
|
|
80
|
+
name: data.author
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
// Organization schema for website
|
|
84
|
+
if (data.type === 'website' && data.siteName) {
|
|
85
|
+
return {
|
|
86
|
+
'@context': 'https://schema.org',
|
|
87
|
+
'@type': 'Organization',
|
|
88
|
+
name: data.siteName,
|
|
89
|
+
url: data.url,
|
|
90
|
+
logo: data.logo,
|
|
91
|
+
contactPoint: data.contactPoint,
|
|
92
|
+
sameAs: data.sameAs
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return baseSchema;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* SEO audit function
|
|
99
|
+
*/
|
|
100
|
+
export function auditSEO() {
|
|
101
|
+
const issues = [];
|
|
102
|
+
const recommendations = [];
|
|
103
|
+
let score = 100;
|
|
104
|
+
if (typeof document === 'undefined') {
|
|
105
|
+
return { score: 0, issues: ['Cannot audit SEO on server side'], recommendations: [] };
|
|
106
|
+
}
|
|
107
|
+
// Check title tag
|
|
108
|
+
const title = document.querySelector('title');
|
|
109
|
+
if (!title || !title.textContent?.trim()) {
|
|
110
|
+
issues.push('Missing page title');
|
|
111
|
+
score -= 20;
|
|
112
|
+
}
|
|
113
|
+
else if (title.textContent.length < 30 || title.textContent.length > 60) {
|
|
114
|
+
issues.push(`Title length should be 30-60 characters (current: ${title.textContent.length})`);
|
|
115
|
+
score -= 10;
|
|
116
|
+
recommendations.push('Optimize title length for better search results');
|
|
117
|
+
}
|
|
118
|
+
// Check meta description
|
|
119
|
+
const description = document.querySelector('meta[name="description"]');
|
|
120
|
+
if (!description || !description.getAttribute('content')?.trim()) {
|
|
121
|
+
issues.push('Missing meta description');
|
|
122
|
+
score -= 15;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
const content = description.getAttribute('content');
|
|
126
|
+
if (content.length < 120 || content.length > 160) {
|
|
127
|
+
issues.push(`Meta description should be 120-160 characters (current: ${content.length})`);
|
|
128
|
+
score -= 8;
|
|
129
|
+
recommendations.push('Optimize meta description length');
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Check canonical URL
|
|
133
|
+
const canonical = document.querySelector('link[rel="canonical"]');
|
|
134
|
+
if (!canonical) {
|
|
135
|
+
issues.push('Missing canonical URL');
|
|
136
|
+
score -= 10;
|
|
137
|
+
recommendations.push('Add canonical URL to prevent duplicate content issues');
|
|
138
|
+
}
|
|
139
|
+
// Check Open Graph tags
|
|
140
|
+
const ogTitle = document.querySelector('meta[property="og:title"]');
|
|
141
|
+
const ogDescription = document.querySelector('meta[property="og:description"]');
|
|
142
|
+
const ogImage = document.querySelector('meta[property="og:image"]');
|
|
143
|
+
if (!ogTitle) {
|
|
144
|
+
issues.push('Missing Open Graph title');
|
|
145
|
+
score -= 5;
|
|
146
|
+
}
|
|
147
|
+
if (!ogDescription) {
|
|
148
|
+
issues.push('Missing Open Graph description');
|
|
149
|
+
score -= 5;
|
|
150
|
+
}
|
|
151
|
+
if (!ogImage) {
|
|
152
|
+
issues.push('Missing Open Graph image');
|
|
153
|
+
score -= 5;
|
|
154
|
+
recommendations.push('Add Open Graph image for better social media sharing');
|
|
155
|
+
}
|
|
156
|
+
// Check for headings structure
|
|
157
|
+
const h1Tags = document.querySelectorAll('h1');
|
|
158
|
+
if (h1Tags.length === 0) {
|
|
159
|
+
issues.push('Missing H1 tag');
|
|
160
|
+
score -= 15;
|
|
161
|
+
}
|
|
162
|
+
else if (h1Tags.length > 1) {
|
|
163
|
+
issues.push('Multiple H1 tags found');
|
|
164
|
+
score -= 10;
|
|
165
|
+
recommendations.push('Use only one H1 tag per page');
|
|
166
|
+
}
|
|
167
|
+
// Check for alt attributes on images
|
|
168
|
+
const images = document.querySelectorAll('img');
|
|
169
|
+
let missingAltCount = 0;
|
|
170
|
+
images.forEach(img => {
|
|
171
|
+
if (!img.getAttribute('alt')) {
|
|
172
|
+
missingAltCount++;
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
if (missingAltCount > 0) {
|
|
176
|
+
issues.push(`${missingAltCount} images missing alt attributes`);
|
|
177
|
+
score -= Math.min(missingAltCount * 2, 15);
|
|
178
|
+
recommendations.push('Add descriptive alt attributes to all images');
|
|
179
|
+
}
|
|
180
|
+
// Check for proper heading hierarchy
|
|
181
|
+
const headings = document.querySelectorAll('h1, h2, h3, h4, h5, h6');
|
|
182
|
+
let previousLevel = 0;
|
|
183
|
+
let hierarchyIssues = false;
|
|
184
|
+
headings.forEach(heading => {
|
|
185
|
+
const level = parseInt(heading.tagName.charAt(1));
|
|
186
|
+
if (level > previousLevel + 1 && previousLevel !== 0) {
|
|
187
|
+
hierarchyIssues = true;
|
|
188
|
+
}
|
|
189
|
+
previousLevel = level;
|
|
190
|
+
});
|
|
191
|
+
if (hierarchyIssues) {
|
|
192
|
+
issues.push('Improper heading hierarchy');
|
|
193
|
+
score -= 8;
|
|
194
|
+
recommendations.push('Maintain proper heading hierarchy (H1 → H2 → H3, etc.)');
|
|
195
|
+
}
|
|
196
|
+
// Check page load speed (basic check)
|
|
197
|
+
if (typeof performance !== 'undefined') {
|
|
198
|
+
const navigation = performance.getEntriesByType('navigation')[0];
|
|
199
|
+
if (navigation) {
|
|
200
|
+
const loadTime = navigation.loadEventEnd - navigation.loadEventStart;
|
|
201
|
+
if (loadTime > 3000) {
|
|
202
|
+
issues.push('Slow page load time');
|
|
203
|
+
score -= 15;
|
|
204
|
+
recommendations.push('Optimize page load speed for better SEO rankings');
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Check for HTTPS
|
|
209
|
+
if (location.protocol !== 'https:' && location.hostname !== 'localhost') {
|
|
210
|
+
issues.push('Not using HTTPS');
|
|
211
|
+
score -= 20;
|
|
212
|
+
recommendations.push('Enable HTTPS for security and SEO benefits');
|
|
213
|
+
}
|
|
214
|
+
// Check viewport meta tag
|
|
215
|
+
const viewport = document.querySelector('meta[name="viewport"]');
|
|
216
|
+
if (!viewport) {
|
|
217
|
+
issues.push('Missing viewport meta tag');
|
|
218
|
+
score -= 10;
|
|
219
|
+
recommendations.push('Add viewport meta tag for mobile optimization');
|
|
220
|
+
}
|
|
221
|
+
return {
|
|
222
|
+
score: Math.max(0, score),
|
|
223
|
+
issues,
|
|
224
|
+
recommendations
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Generate sitemap XML
|
|
229
|
+
*/
|
|
230
|
+
export function generateSitemapXML(urls) {
|
|
231
|
+
const baseUrl = typeof window !== 'undefined' ? window.location.origin : '';
|
|
232
|
+
const urlElements = urls.map(item => `
|
|
233
|
+
<url>
|
|
234
|
+
<loc>${baseUrl}${item.url}</loc>
|
|
235
|
+
${item.lastModified ? `<lastmod>${item.lastModified}</lastmod>` : ''}
|
|
236
|
+
${item.changeFreq ? `<changefreq>${item.changeFreq}</changefreq>` : ''}
|
|
237
|
+
${item.priority ? `<priority>${item.priority}</priority>` : ''}
|
|
238
|
+
</url>`).join('');
|
|
239
|
+
return `<?xml version="1.0" encoding="UTF-8"?>
|
|
240
|
+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
|
241
|
+
${urlElements}
|
|
242
|
+
</urlset>`;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Generate robots.txt content
|
|
246
|
+
*/
|
|
247
|
+
export function generateRobotsTxt(config) {
|
|
248
|
+
const baseUrl = typeof window !== 'undefined' ? window.location.origin : '';
|
|
249
|
+
let content = 'User-agent: *\n';
|
|
250
|
+
if (config.allow) {
|
|
251
|
+
config.allow.forEach(path => {
|
|
252
|
+
content += `Allow: ${path}\n`;
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
if (config.disallow) {
|
|
256
|
+
config.disallow.forEach(path => {
|
|
257
|
+
content += `Disallow: ${path}\n`;
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
content += 'Allow: /\n';
|
|
262
|
+
}
|
|
263
|
+
if (config.crawlDelay) {
|
|
264
|
+
content += `Crawl-delay: ${config.crawlDelay}\n`;
|
|
265
|
+
}
|
|
266
|
+
if (config.sitemap) {
|
|
267
|
+
content += `\nSitemap: ${baseUrl}${config.sitemap}\n`;
|
|
268
|
+
}
|
|
269
|
+
return content;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* SEO utilities for development
|
|
273
|
+
*/
|
|
274
|
+
export const seoUtils = {
|
|
275
|
+
/**
|
|
276
|
+
* Log SEO audit results
|
|
277
|
+
*/
|
|
278
|
+
logAudit() {
|
|
279
|
+
if (typeof window === 'undefined')
|
|
280
|
+
return;
|
|
281
|
+
const audit = auditSEO();
|
|
282
|
+
console.group('🔍 SEO Audit');
|
|
283
|
+
console.log(`Score: ${audit.score}/100`);
|
|
284
|
+
if (audit.issues.length > 0) {
|
|
285
|
+
console.group('Issues:');
|
|
286
|
+
audit.issues.forEach(issue => console.warn('⚠️', issue));
|
|
287
|
+
console.groupEnd();
|
|
288
|
+
}
|
|
289
|
+
if (audit.recommendations.length > 0) {
|
|
290
|
+
console.group('Recommendations:');
|
|
291
|
+
audit.recommendations.forEach(rec => console.info('💡', rec));
|
|
292
|
+
console.groupEnd();
|
|
293
|
+
}
|
|
294
|
+
console.groupEnd();
|
|
295
|
+
},
|
|
296
|
+
/**
|
|
297
|
+
* Preview how page appears in search results
|
|
298
|
+
*/
|
|
299
|
+
previewSearchResult() {
|
|
300
|
+
if (typeof document === 'undefined')
|
|
301
|
+
return null;
|
|
302
|
+
const title = document.querySelector('title')?.textContent || '';
|
|
303
|
+
const description = document.querySelector('meta[name="description"]')?.getAttribute('content') || '';
|
|
304
|
+
const url = window.location.href;
|
|
305
|
+
return {
|
|
306
|
+
title: title.length > 60 ? title.substring(0, 57) + '...' : title,
|
|
307
|
+
url,
|
|
308
|
+
description: description.length > 160 ? description.substring(0, 157) + '...' : description
|
|
309
|
+
};
|
|
310
|
+
},
|
|
311
|
+
/**
|
|
312
|
+
* Get page insights for SEO
|
|
313
|
+
*/
|
|
314
|
+
getPageInsights() {
|
|
315
|
+
if (typeof document === 'undefined')
|
|
316
|
+
return null;
|
|
317
|
+
// Word count
|
|
318
|
+
const textContent = document.body.textContent || '';
|
|
319
|
+
const wordCount = textContent.trim().split(/\s+/).length;
|
|
320
|
+
// Reading time (average 200 words per minute)
|
|
321
|
+
const readingTime = Math.ceil(wordCount / 200);
|
|
322
|
+
// Heading structure
|
|
323
|
+
const headingStructure = {};
|
|
324
|
+
['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].forEach(tag => {
|
|
325
|
+
headingStructure[tag] = document.querySelectorAll(tag).length;
|
|
326
|
+
});
|
|
327
|
+
// Link analysis
|
|
328
|
+
const links = document.querySelectorAll('a[href]');
|
|
329
|
+
let internalLinks = 0;
|
|
330
|
+
let externalLinks = 0;
|
|
331
|
+
links.forEach(link => {
|
|
332
|
+
const href = link.getAttribute('href') || '';
|
|
333
|
+
if (href.startsWith('http') && !href.includes(window.location.hostname)) {
|
|
334
|
+
externalLinks++;
|
|
335
|
+
}
|
|
336
|
+
else if (!href.startsWith('#') && !href.startsWith('mailto:') && !href.startsWith('tel:')) {
|
|
337
|
+
internalLinks++;
|
|
338
|
+
}
|
|
339
|
+
});
|
|
340
|
+
return {
|
|
341
|
+
wordCount,
|
|
342
|
+
readingTime,
|
|
343
|
+
headingStructure,
|
|
344
|
+
internalLinks,
|
|
345
|
+
externalLinks
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
// Initialize SEO monitoring in development
|
|
350
|
+
if (import.meta.env.DEV && typeof window !== 'undefined') {
|
|
351
|
+
window.addEventListener('load', () => {
|
|
352
|
+
setTimeout(() => {
|
|
353
|
+
seoUtils.logAudit();
|
|
354
|
+
}, 1000);
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=seo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/utils/seo.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xbg.solutions/bpsk-utils-seo",
|
|
3
|
+
"version": "1.2.3",
|
|
4
|
+
"description": "XBG SEO - Meta tags, structured data, OpenGraph",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"types": "lib/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": ["lib"],
|
|
9
|
+
"scripts": {
|
|
10
|
+
"build": "tsc",
|
|
11
|
+
"build:watch": "tsc --watch",
|
|
12
|
+
"clean": "rm -rf lib",
|
|
13
|
+
"prepublishOnly": "npm run build"
|
|
14
|
+
},
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@xbg.solutions/bpsk-core": "^1.0.0"
|
|
20
|
+
},
|
|
21
|
+
"peerDependencies": {
|
|
22
|
+
"svelte": "^5.0.0"
|
|
23
|
+
}
|
|
24
|
+
}
|