Skip to content

Commit d48b2f8

Browse files
committed
fix: wait page readiness for robots and og
1 parent 3b7c027 commit d48b2f8

1 file changed

Lines changed: 27 additions & 3 deletions

File tree

app/pages/package/[...package].vue

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ if (import.meta.server) {
5353
assertValidPackageName(packageName.value)
5454
}
5555
56-
const { data: downloads } = usePackageDownloads(packageName, 'last-week')
56+
const { data: downloads, refresh: refreshDownloads } = usePackageDownloads(packageName, 'last-week')
5757
5858
// Fetch README for specific version if requested, otherwise latest
5959
const { data: readmeData } = useLazyFetch<ReadmeResponse>(
@@ -136,6 +136,7 @@ const {
136136
data: pkg,
137137
status,
138138
error,
139+
refresh: refreshPkg,
139140
} = usePackage(packageName, resolvedVersion.value ?? requestedVersion)
140141
const displayVersion = computed(() => pkg.value?.requestedVersion ?? null)
141142
@@ -243,7 +244,15 @@ const repositoryUrl = computed(() => {
243244
return url
244245
})
245246
246-
const { meta: repoMeta, repoRef, stars, starsLink, forks, forksLink } = useRepoMeta(repositoryUrl)
247+
const {
248+
meta: repoMeta,
249+
repoRef,
250+
stars,
251+
starsLink,
252+
forks,
253+
forksLink,
254+
refresh: refreshRepoMeta,
255+
} = useRepoMeta(repositoryUrl)
247256
248257
const PROVIDER_ICONS: Record<string, string> = {
249258
github: 'i-carbon:logo-github',
@@ -446,12 +455,27 @@ onKeyStroke(
446455
},
447456
)
448457
458+
// Wait for all critical data to be received on the server side for correct OG rendering and better results for robots
459+
if (import.meta.server) {
460+
const event = useRequestEvent()
461+
const agent = event?.node.req.headers['user-agent']?.toLowerCase() || ''
462+
const crawlerRegex =
463+
/(facebookexternalhit|bluesky|twitterbot|linkedinbot|discordbot|slackbot|telegrambot|whatsapp|vkshare|skypeuripreview|googlebot|bingbot|yandexbot|baiduspider|duckduckbot|crawler|spider|bot|preview)/i
464+
465+
const isCrawler = crawlerRegex.test(agent)
466+
467+
if (isCrawler) {
468+
await refreshPkg()
469+
await Promise.all([refreshRepoMeta(), refreshDownloads()])
470+
}
471+
}
472+
449473
defineOgImageComponent('Package', {
450474
name: () => pkg.value?.name ?? 'Package',
451475
version: () => resolvedVersion.value ?? '',
452476
downloads: () => (downloads.value ? $n(downloads.value.downloads) : ''),
453477
license: () => pkg.value?.license ?? '',
454-
stars: () => stars.value ?? 0,
478+
stars: () => repoMeta.value?.stars ?? 0,
455479
primaryColor: '#60a5fa',
456480
})
457481
</script>

0 commit comments

Comments
 (0)