Skip to content

Commit 5ac718b

Browse files
committed
seo
1 parent 19189c7 commit 5ac718b

24 files changed

Lines changed: 464 additions & 92 deletions

.github/copilot-instructions.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ Create comprehensive, user-friendly documentation that showcases html2rss capabi
4747
- Use consistent terminology
4848
- Ensure the Site Navigation is assembled in a logical and user-friendly manner.
4949
- Prevent adding (and remove existing) "technical clutter" content.
50+
- follow AIDA-model to craft ensure content is engaging and SEO-friendly
5051

5152
## Performance & SEO
5253

assets/images/site.webmanifest

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{
2-
"name": "",
3-
"short_name": "",
2+
"name": "html2rss - Turn Any Website Into RSS",
3+
"short_name": "html2rss",
4+
"description": "Create RSS feeds from any website - no coding required. Turn blogs, news sites, and forums into RSS feeds you can follow in your favorite reader.",
5+
"start_url": "/",
6+
"scope": "/",
47
"icons": [
58
{
69
"src": "/assets/images/android-chrome-192x192.png",

astro.config.mjs

Lines changed: 125 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// @ts-check
22
import { defineConfig } from "astro/config";
33
import starlight from "@astrojs/starlight";
4+
import sitemap from "@astrojs/sitemap";
45

56
// https://astro.build/config
67
export default defineConfig({
@@ -9,14 +10,44 @@ export default defineConfig({
910
redirects: {
1011
// Only redirect actual old Jekyll URLs that need to be redirected
1112
},
13+
build: {
14+
inlineStylesheets: "auto",
15+
},
16+
image: {
17+
domains: ["html2rss.github.io"],
18+
remotePatterns: [
19+
{
20+
protocol: "https",
21+
hostname: "html2rss.github.io",
22+
},
23+
],
24+
},
25+
vite: {
26+
build: {
27+
rollupOptions: {
28+
output: {
29+
manualChunks: {
30+
vendor: ["@astrojs/starlight"],
31+
},
32+
},
33+
},
34+
},
35+
},
1236
integrations: [
37+
sitemap({
38+
filter: (page) => {
39+
// Simple path-based exclusion for known noindex pages
40+
return !page.includes("/feed-directory/");
41+
},
42+
}),
1343
starlight({
1444
title: "html2rss",
1545
description:
1646
"html2rss brings back RSS. It's an open source project with decentralised instances. These instances generate RSS feeds for websites which do not offer them.",
1747
logo: {
1848
src: "./src/assets/logo.png",
1949
replacesTitle: true,
50+
alt: "html2rss logo - Turn any website into RSS",
2051
},
2152
head: [
2253
{
@@ -54,6 +85,49 @@ export default defineConfig({
5485
content: "#111111",
5586
},
5687
},
88+
{
89+
tag: "meta",
90+
attrs: {
91+
name: "keywords",
92+
content:
93+
"RSS, feed, web scraping, automation, open source, Ruby, Astro, Starlight, html2rss, RSS generator, website to RSS",
94+
},
95+
},
96+
{
97+
tag: "meta",
98+
attrs: {
99+
name: "author",
100+
content: "html2rss team",
101+
},
102+
},
103+
{
104+
tag: "meta",
105+
attrs: {
106+
name: "robots",
107+
content: "index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1",
108+
},
109+
},
110+
{
111+
tag: "meta",
112+
attrs: {
113+
property: "og:type",
114+
content: "website",
115+
},
116+
},
117+
{
118+
tag: "meta",
119+
attrs: {
120+
property: "og:site_name",
121+
content: "html2rss",
122+
},
123+
},
124+
{
125+
tag: "meta",
126+
attrs: {
127+
property: "og:locale",
128+
content: "en_US",
129+
},
130+
},
57131
{
58132
tag: "link",
59133
attrs: {
@@ -102,6 +176,15 @@ export default defineConfig({
102176
href: "/assets/images/favicon.ico",
103177
},
104178
},
179+
{
180+
tag: "link",
181+
attrs: {
182+
rel: "preload",
183+
href: "/assets/images/logo.png",
184+
as: "image",
185+
type: "image/png",
186+
},
187+
},
105188
{
106189
tag: "script",
107190
attrs: {
@@ -110,6 +193,44 @@ export default defineConfig({
110193
src: "//gc.zgo.at/count.js",
111194
},
112195
},
196+
{
197+
tag: "script",
198+
attrs: {
199+
type: "application/ld+json",
200+
},
201+
content: JSON.stringify({
202+
"@context": "https://schema.org",
203+
"@type": "SoftwareApplication",
204+
name: "html2rss",
205+
description:
206+
"html2rss brings back RSS. It's an open source project with decentralised instances. These instances generate RSS feeds for websites which do not offer them.",
207+
url: "https://html2rss.github.io",
208+
applicationCategory: "DeveloperApplication",
209+
operatingSystem: "Web",
210+
offers: {
211+
"@type": "Offer",
212+
price: "0",
213+
priceCurrency: "USD",
214+
},
215+
author: {
216+
"@type": "Organization",
217+
name: "html2rss",
218+
url: "https://github.com/html2rss",
219+
},
220+
license: "https://github.com/html2rss/html2rss/blob/main/LICENSE",
221+
codeRepository: "https://github.com/html2rss/html2rss",
222+
programmingLanguage: "Ruby",
223+
keywords: "RSS, feed, web scraping, automation, open source, Ruby, Astro, Starlight",
224+
featureList: [
225+
"Create RSS feeds from any website",
226+
"No coding required",
227+
"Open source",
228+
"Decentralized instances",
229+
"Web application interface",
230+
"Ruby gem for developers",
231+
],
232+
}),
233+
},
113234
],
114235
social: [
115236
{
@@ -175,12 +296,12 @@ export default defineConfig({
175296
],
176297
},
177298
{
178-
label: "About",
179-
link: "/about",
299+
label: "Write Your Own Feed Configs",
300+
link: "/html2rss-configs",
180301
},
181302
{
182-
label: "Creating Custom Feeds",
183-
link: "/html2rss-configs",
303+
label: "About",
304+
link: "/about",
184305
},
185306
{
186307
label: "Get Involved",

package-lock.json

Lines changed: 5 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"lintfix": "prettier --write ."
1515
},
1616
"dependencies": {
17+
"@astrojs/sitemap": "^3.6.0",
1718
"@astrojs/starlight": "^0.35.3",
1819
"astro": "^5.6.1",
1920
"sharp": "^0.34.2"

public/assets/site.webmanifest

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
{
2-
"name": "",
3-
"short_name": "",
2+
"name": "html2rss - Turn Any Website Into RSS",
3+
"short_name": "html2rss",
4+
"description": "Create RSS feeds from any website - no coding required. Turn blogs, news sites, and forums into RSS feeds you can follow in your favorite reader.",
5+
"start_url": "/",
6+
"scope": "/",
47
"icons": [
58
{
69
"src": "/assets/images/android-chrome-192x192.png",

public/robots.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
User-agent: *
2+
Allow: /
3+
Disallow: /feed-directory/
4+
5+
Sitemap: https://html2rss.github.io/sitemap.xml

src/components/FeedDirectory.astro

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ const staticFeedUrls = configs.map((config) => ({
3535
<div class="container">
3636
<!-- Progressive Enhancement: Works without JavaScript -->
3737
<div class="filters">
38-
<label for="instance-url-input"> Instance URL </label>
38+
<label for="instance-url-input">Instance URL</label>
3939
<input
4040
type="text"
4141
name="instance"
@@ -45,7 +45,7 @@ const staticFeedUrls = configs.map((config) => ({
4545
placeholder="https://your-instance.com"
4646
/>
4747

48-
<label for="search-input"> Search Feeds </label>
48+
<label for="search-input">Search Feeds</label>
4949
<input
5050
type="search"
5151
name="search"
@@ -197,6 +197,8 @@ const staticFeedUrls = configs.map((config) => ({
197197

198198
.input {
199199
width: 100%;
200+
padding: 0.125rem 0.5rem;
201+
font-family: monospace;
200202
}
201203

202204
/* List Layout */
@@ -222,6 +224,10 @@ const staticFeedUrls = configs.map((config) => ({
222224
font-weight: 600;
223225
color: hsl(var(--sl-color-text));
224226
line-height: 1.3;
227+
}
228+
229+
.feed-title,
230+
.feed-title > span {
225231
user-select: all;
226232
white-space: nowrap;
227233
}
@@ -246,6 +252,7 @@ const staticFeedUrls = configs.map((config) => ({
246252

247253
.source-url {
248254
margin-top: 0.25rem;
255+
display: none;
249256
}
250257

251258
.source-link {
@@ -337,7 +344,7 @@ const staticFeedUrls = configs.map((config) => ({
337344
display: flex;
338345
flex-direction: column;
339346
background: hsl(var(--sl-color-bg));
340-
padding: 1rem;
347+
padding: 0.5rem;
341348
transition: all 0.2s ease;
342349
border-bottom: 1px solid hsl(var(--sl-color-gray-4));
343350
}
@@ -349,7 +356,6 @@ const staticFeedUrls = configs.map((config) => ({
349356
.feed-main {
350357
display: flex;
351358
flex-direction: column;
352-
gap: 1rem;
353359
}
354360

355361
.feed-info {
@@ -360,7 +366,7 @@ const staticFeedUrls = configs.map((config) => ({
360366
order: 2;
361367
display: flex;
362368
flex-direction: row;
363-
gap: 0.5rem;
369+
gap: 0.25rem;
364370
width: 100%;
365371
justify-content: flex-start;
366372
align-items: center;
@@ -428,14 +434,13 @@ const staticFeedUrls = configs.map((config) => ({
428434
}
429435

430436
.feed-item {
431-
padding: 0.75rem 1rem;
437+
padding: 0;
432438
}
433439

434440
.feed-main {
435441
flex-direction: row;
436442
justify-content: space-between;
437443
align-items: center;
438-
gap: 1rem;
439444
}
440445

441446
.feed-info {
@@ -447,7 +452,6 @@ const staticFeedUrls = configs.map((config) => ({
447452
.actions {
448453
order: 2;
449454
flex-direction: row;
450-
gap: 0.5rem;
451455
width: auto;
452456
flex-shrink: 0;
453457
align-items: center;
@@ -456,7 +460,6 @@ const staticFeedUrls = configs.map((config) => ({
456460
.action-button {
457461
width: auto;
458462
height: 32px;
459-
padding: 0.25rem 0.75rem;
460463
font-size: 0.75rem;
461464
border-radius: 0.25rem;
462465
}

0 commit comments

Comments
 (0)