Skip to content

Commit 15f667e

Browse files
committed
improve SEO
1 parent c94aac9 commit 15f667e

File tree

9 files changed

+679
-8
lines changed

9 files changed

+679
-8
lines changed

.vscode/extensions.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,5 @@
33
"esbenp.prettier-vscode",
44
"svelte.svelte-vscode",
55
"bradlc.vscode-tailwindcss"
6-
],
7-
"unwantedRecommendations": []
6+
]
87
}

index.html

Lines changed: 132 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
<!doctype html>
22
<html lang="en">
33
<head>
4-
<meta name="viewport" content="width=device-width" />
4+
<meta charset="utf-8" />
5+
<meta name="viewport" content="width=device-width, initial-scale=1" />
56
<title><%= it.title %></title>
67
<link rel="icon" href="/favicon.png" />
8+
<link rel="manifest" href="/manifest.json" />
9+
<link rel="canonical" href="<%= it.url %>" />
710
<link
811
rel="preload"
912
href="/font/Mona-Sans.woff2"
@@ -12,23 +15,151 @@
1215
crossorigin=""
1316
/>
1417

18+
<!-- DNS Prefetch for external resources -->
19+
<link rel="dns-prefetch" href="//github.com" />
20+
<link rel="dns-prefetch" href="//codesandbox.io" />
21+
<link rel="dns-prefetch" href="//play.vuejs.org" />
22+
<link rel="dns-prefetch" href="//svelte.dev" />
23+
<link rel="dns-prefetch" href="//playground.solidjs.com" />
24+
<link rel="dns-prefetch" href="//qwik.builder.io" />
25+
<link rel="dns-prefetch" href="//lit.dev" />
26+
<link rel="dns-prefetch" href="//ember-twiddle.com" />
27+
<link rel="dns-prefetch" href="//markojs.com" />
28+
<link rel="dns-prefetch" href="//stackblitz.com" />
29+
<link rel="dns-prefetch" href="//www.ripplejs.com" />
30+
31+
<!-- Preconnect to critical external domains -->
32+
<link rel="preconnect" href="https://github.com" crossorigin />
33+
<link rel="preconnect" href="https://codesandbox.io" crossorigin />
34+
1535
<!-- Primary Meta Tags -->
1636
<meta name="title" content="<%= it.title %>" />
1737
<meta name="description" content="<%= it.description %>" />
38+
<meta name="keywords" content="<%= it.keywords %>" />
39+
<meta name="author" content="Component Party" />
40+
<meta
41+
name="robots"
42+
content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"
43+
/>
44+
<meta name="googlebot" content="index, follow" />
45+
<meta name="bingbot" content="index, follow" />
1846

1947
<!-- Open Graph / Facebook -->
2048
<meta property="og:type" content="website" />
2149
<meta property="og:url" content="<%= it.url %>" />
2250
<meta property="og:title" content="<%= it.title %>" />
2351
<meta property="og:description" content="<%= it.description %>" />
2452
<meta property="og:image" content="<%= it.image %>" />
53+
<meta property="og:image:width" content="1200" />
54+
<meta property="og:image:height" content="630" />
55+
<meta
56+
property="og:image:alt"
57+
content="<%= it.title %> - JavaScript Framework Comparison"
58+
/>
59+
<meta property="og:site_name" content="Component Party" />
60+
<meta property="og:locale" content="en_US" />
2561

2662
<!-- Twitter -->
2763
<meta property="twitter:card" content="summary_large_image" />
2864
<meta property="twitter:url" content="<%= it.url %>" />
2965
<meta property="twitter:title" content="<%= it.title %>" />
3066
<meta property="twitter:description" content="<%= it.description %>" />
3167
<meta property="twitter:image" content="<%= it.image %>" />
68+
<meta
69+
property="twitter:image:alt"
70+
content="<%= it.title %> - JavaScript Framework Comparison"
71+
/>
72+
<meta property="twitter:creator" content="@componentparty" />
73+
<meta property="twitter:site" content="@componentparty" />
74+
75+
<!-- Additional SEO Meta Tags -->
76+
<meta name="theme-color" content="#111827" />
77+
<meta name="msapplication-TileColor" content="#111827" />
78+
<meta name="apple-mobile-web-app-capable" content="yes" />
79+
<meta
80+
name="apple-mobile-web-app-status-bar-style"
81+
content="black-translucent"
82+
/>
83+
<meta name="apple-mobile-web-app-title" content="Component Party" />
84+
<meta name="application-name" content="Component Party" />
85+
<meta name="mobile-web-app-capable" content="yes" />
86+
<meta name="format-detection" content="telephone=no" />
87+
88+
<!-- Structured Data (JSON-LD) -->
89+
<script type="application/ld+json">
90+
{
91+
"@context": "https://schema.org",
92+
"@type": "WebApplication",
93+
"name": "Component Party",
94+
"description": "<%= it.description %>",
95+
"url": "<%= it.url %>",
96+
"applicationCategory": "DeveloperApplication",
97+
"operatingSystem": "Web Browser",
98+
"offers": {
99+
"@type": "Offer",
100+
"price": "0",
101+
"priceCurrency": "USD"
102+
},
103+
"author": {
104+
"@type": "Organization",
105+
"name": "Component Party",
106+
"url": "https://component-party.dev"
107+
},
108+
"publisher": {
109+
"@type": "Organization",
110+
"name": "Component Party",
111+
"url": "https://component-party.dev",
112+
"logo": {
113+
"@type": "ImageObject",
114+
"url": "https://component-party.dev/popper.svg"
115+
}
116+
},
117+
"keywords": "<%= it.keywords %>",
118+
"inLanguage": "en-US",
119+
"isAccessibleForFree": true,
120+
"browserRequirements": "Requires JavaScript. Requires HTML5.",
121+
"softwareVersion": "2.0.0",
122+
"datePublished": "2024-01-01",
123+
"dateModified": "2024-12-01",
124+
"mainEntity": {
125+
"@type": "ItemList",
126+
"name": "JavaScript Frameworks Comparison",
127+
"description": "A comprehensive comparison of popular JavaScript frameworks and libraries",
128+
"numberOfItems": "<%= it.frameworkCount || '20+' %>",
129+
"itemListElement": [
130+
{
131+
"@type": "SoftwareApplication",
132+
"name": "React",
133+
"description": "A JavaScript library for building user interfaces",
134+
"applicationCategory": "WebApplication",
135+
"operatingSystem": "Web Browser"
136+
},
137+
{
138+
"@type": "SoftwareApplication",
139+
"name": "Vue.js",
140+
"description": "A progressive JavaScript framework for building user interfaces",
141+
"applicationCategory": "WebApplication",
142+
"operatingSystem": "Web Browser"
143+
},
144+
{
145+
"@type": "SoftwareApplication",
146+
"name": "Angular",
147+
"description": "A platform and framework for building single-page client applications",
148+
"applicationCategory": "WebApplication",
149+
"operatingSystem": "Web Browser"
150+
},
151+
{
152+
"@type": "SoftwareApplication",
153+
"name": "Svelte",
154+
"description": "A radical new approach to building user interfaces",
155+
"applicationCategory": "WebApplication",
156+
"operatingSystem": "Web Browser"
157+
}
158+
]
159+
}
160+
}
161+
</script>
162+
32163
<style>
33164
@font-face {
34165
font-family: "Mona Sans";

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"check:watch": "svelte-check --tsconfig ./tsconfig.json --watch",
1717
"build:content": "node scripts/generateContent.ts --no-cache",
1818
"build:progress": "node scripts/generateReadMeProgress.ts",
19+
"build:sitemap": "node scripts/generateSitemap.ts",
1920
"test:content-hook": "node scripts/checkContentChanges.ts",
2021
"prepare": "lefthook install",
2122
"test:e2e": "playwright test",

public/manifest.json

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
{
2+
"name": "Component Party - JavaScript Framework Comparison",
3+
"short_name": "Component Party",
4+
"description": "Compare JavaScript frameworks side-by-side: React, Vue, Angular, Svelte, Solid.js, and more. See syntax differences, features, and code examples for web development frameworks.",
5+
"start_url": "/",
6+
"display": "standalone",
7+
"background_color": "#111827",
8+
"theme_color": "#111827",
9+
"orientation": "portrait-primary",
10+
"scope": "/",
11+
"lang": "en-US",
12+
"categories": ["developer", "productivity", "utilities"],
13+
"icons": [
14+
{
15+
"src": "/favicon.png",
16+
"sizes": "192x192",
17+
"type": "image/png",
18+
"purpose": "any maskable"
19+
},
20+
{
21+
"src": "/favicon.png",
22+
"sizes": "512x512",
23+
"type": "image/png",
24+
"purpose": "any maskable"
25+
}
26+
],
27+
"screenshots": [
28+
{
29+
"src": "/banner2.png",
30+
"sizes": "1200x630",
31+
"type": "image/png",
32+
"form_factor": "wide",
33+
"label": "Component Party Framework Comparison Interface"
34+
}
35+
],
36+
"shortcuts": [
37+
{
38+
"name": "React vs Vue",
39+
"short_name": "React vs Vue",
40+
"description": "Compare React and Vue.js frameworks",
41+
"url": "/?f=react,vue3",
42+
"icons": [
43+
{
44+
"src": "/favicon.png",
45+
"sizes": "192x192"
46+
}
47+
]
48+
},
49+
{
50+
"name": "React vs Angular",
51+
"short_name": "React vs Angular",
52+
"description": "Compare React and Angular frameworks",
53+
"url": "/?f=react,angularRenaissance",
54+
"icons": [
55+
{
56+
"src": "/favicon.png",
57+
"sizes": "192x192"
58+
}
59+
]
60+
},
61+
{
62+
"name": "Vue vs Svelte",
63+
"short_name": "Vue vs Svelte",
64+
"description": "Compare Vue.js and Svelte frameworks",
65+
"url": "/?f=vue3,svelte5",
66+
"icons": [
67+
{
68+
"src": "/favicon.png",
69+
"sizes": "192x192"
70+
}
71+
]
72+
}
73+
]
74+
}

public/robots.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,9 @@
22

33
User-agent: *
44
Allow: /
5+
6+
# Sitemap
7+
Sitemap: https://component-party.dev/sitemap.xml
8+
9+
# Crawl-delay for respectful crawling
10+
Crawl-delay: 1

0 commit comments

Comments
 (0)