Skip to content

Commit 2c80443

Browse files
[C-2957] Add h1 tag for SEO (#3887)
1 parent bae86c3 commit 2c80443

File tree

1 file changed

+19
-2
lines changed
  • packages/web/scripts/workers-site

1 file changed

+19
-2
lines changed

packages/web/scripts/workers-site/index.js

+19-2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ const discoveryNodes = DISCOVERY_NODES.split(',')
88
const discoveryNode =
99
discoveryNodes[Math.floor(Math.random() * discoveryNodes.length)]
1010

11+
let h1 = null
12+
1113
const routes = [
1214
{ pattern: /^\/([^/]+)$/, name: 'user', keys: ['handle'] },
1315
{
@@ -128,7 +130,17 @@ function clean(str) {
128130
.replace(/"/g, '"')
129131
}
130132

131-
class HeadElementHandler {
133+
class SEOHandlerBody {
134+
element(element) {
135+
if (!h1) {
136+
return
137+
}
138+
const h1Tag = `<h1 id="audius-h1" style="visibility:hidden;display:none;">${h1}</h1>`
139+
element.prepend(h1Tag, { html: true })
140+
}
141+
}
142+
143+
class SEOHandlerHead {
132144
constructor(pathname) {
133145
self.pathname = pathname
134146
}
@@ -154,6 +166,7 @@ class HeadElementHandler {
154166
switch (name) {
155167
case 'user': {
156168
title = `${metadata.data.name} • Audius`
169+
h1 = metadata.data.name
157170
description = `Play ${metadata.data.name} on Audius and discover followers on Audius`
158171
ogDescription = metadata.data.bio || description
159172
image = metadata.data.profile_picture
@@ -164,6 +177,7 @@ class HeadElementHandler {
164177
}
165178
case 'track': {
166179
title = `${metadata.data.title} by ${metadata.data.user.name} • Audius`
180+
h1 = metadata.data.title
167181
description = `Stream ${metadata.data.title} by ${metadata.data.user.name} on Audius | Stream similar artists to ${metadata.data.user.name} on desktop and mobile`
168182
ogDescription = metadata.data.description || description
169183
image = metadata.data.artwork ? metadata.data.artwork['480x480'] : ''
@@ -172,6 +186,7 @@ class HeadElementHandler {
172186
}
173187
case 'playlist': {
174188
title = `${metadata.data[0].playlist_name} by ${metadata.data[0].user.name} • Audius`
189+
h1 = metadata.data[0].playlist_name
175190
description = `Listen to ${metadata.data[0].playlist_name}, a playlist curated by ${metadata.data[0].user.name} on Audius`
176191
ogDescription = metadata.data[0].description || ''
177192
image = metadata.data[0].artwork
@@ -182,6 +197,7 @@ class HeadElementHandler {
182197
}
183198
case 'album': {
184199
title = `${metadata.data[0].playlist_name} by ${metadata.data[0].user.name} • Audius`
200+
h1 = metadata.data[0].playlist_name
185201
description = `Listen to ${metadata.data[0].playlist_name}, an album by ${metadata.data[0].user.name} on Audius`
186202
ogDescription = metadata.data[0].description || ''
187203
image = metadata.data[0].artwork
@@ -268,7 +284,8 @@ async function handleEvent(event) {
268284
const asset = await getAssetFromKV(event, options)
269285

270286
const rewritten = new HTMLRewriter()
271-
.on('head', new HeadElementHandler(pathname))
287+
.on('head', new SEOHandlerHead(pathname))
288+
.on('body', new SEOHandlerBody())
272289
.transform(asset)
273290
return rewritten
274291
} catch (e) {

0 commit comments

Comments
 (0)