Skip to content

Commit 70897e8

Browse files
authored
Merge pull request #108 from FilOzone/bp/add-structured-data
[UXIT-3655] Add structured data and SEO improvements
2 parents 9de5594 + 3d6354b commit 70897e8

20 files changed

+444
-69
lines changed

package-lock.json

Lines changed: 8 additions & 60 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
@@ -49,6 +49,7 @@
4949
"abitype": "^1.2.0",
5050
"frontmatter-markdown-loader": "^3.7.0",
5151
"postcss": "^8.5.6",
52+
"schema-dts": "^1.1.5",
5253
"tailwindcss": "^4",
5354
"typescript": "^5"
5455
}

src/app/(homepage)/page.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ import { Faq } from '@/components/Faq'
1313
import { Navigation } from '@/components/Navigation/Navigation'
1414
import { Phase } from '@/components/Phase'
1515
import { SimpleCardWithImage } from '@/components/SimpleCardWithImage'
16+
import { StructuredDataScript } from '@/components/StructuredDataScript'
1617

17-
import { FOC_URLS } from '@/constants/site-metadata'
18+
import { FOC_URLS, SEO } from '@/constants/site-metadata'
1819
import CometVideoPoster from '@/public/assets/comet-video-poster.webp'
1920

2021
import { buildPhases } from './data/build-phases'
@@ -24,10 +25,12 @@ import { faqs } from './data/faqs'
2425
import { filecoinOnchainCloudProducts } from './data/filecoin-onchain-cloud-products'
2526
import { focFeatures } from './data/foc-features'
2627
import { runningOnFilecoinOnchainCloud } from './data/running-on-filecoin-onchain-cloud'
28+
import { generateStructuredData } from './utils/generateStructuredData'
2729

2830
export default function Homepage() {
2931
return (
3032
<>
33+
<StructuredDataScript structuredData={generateStructuredData(SEO)} />
3134
<div className="isolate relative">
3235
<BackgroundVideo
3336
videoPath="/comet-video.mp4"
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import type { WebPageGraph } from '@/components/StructuredDataScript'
2+
3+
import { PATHS, type StaticPath } from '@/constants/paths'
4+
import type { StructuredDataParams } from '@/types/structured-data-params'
5+
import { generatePageStructuredData } from '@/utils/generate-page-structured-data'
6+
7+
export function generateStructuredData(
8+
seo: StructuredDataParams,
9+
): WebPageGraph {
10+
return generatePageStructuredData({
11+
title: seo.title,
12+
description: seo.description,
13+
path: PATHS.HOMEPAGE.path as StaticPath,
14+
pageType: 'WebPage',
15+
imageUrl: '/assets/comet-video-poster.webp',
16+
})
17+
}

src/app/privacy-policy/page.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@ import { MarkdownPage } from '@filecoin-foundation/ui-filecoin/Markdown/Markdown
33
import { PageSection } from '@filecoin-foundation/ui-filecoin/PageSection'
44

55
import { Navigation } from '@/components/Navigation/Navigation'
6+
import { StructuredDataScript } from '@/components/StructuredDataScript'
67

78
import { PATHS } from '@/constants/paths'
89
import { createMetadata } from '@/utils/create-metadata'
910

1011
import { PRIVACY_POLICY_SEO } from './constants/seo'
1112
import privacyPolicyMarkdown from './privacy-policy.md'
13+
import { generateStructuredData } from './utils/generateStructuredData'
1214

1315
const { body } = privacyPolicyMarkdown
1416

1517
export default function PrivacyPolicy() {
1618
return (
1719
<>
20+
<StructuredDataScript
21+
structuredData={generateStructuredData(PRIVACY_POLICY_SEO)}
22+
/>
23+
1824
<Navigation backgroundVariant="light" />
1925
<PageSection backgroundVariant="light" paddingVariant="compact">
2026
<MarkdownPage>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { WebPageGraph } from '@/components/StructuredDataScript'
2+
3+
import { PATHS, type StaticPath } from '@/constants/paths'
4+
import type { StructuredDataParams } from '@/types/structured-data-params'
5+
import { generatePageStructuredData } from '@/utils/generate-page-structured-data'
6+
7+
export function generateStructuredData(
8+
seo: StructuredDataParams,
9+
): WebPageGraph {
10+
return generatePageStructuredData({
11+
title: seo.title,
12+
description: seo.description,
13+
path: PATHS.PRIVACY_POLICY.path as StaticPath,
14+
pageType: 'WebPage',
15+
})
16+
}

src/app/service-providers/page.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
1+
import { StructuredDataScript } from '@/components/StructuredDataScript'
2+
13
import { PATHS } from '@/constants/paths'
24
import { createMetadata } from '@/utils/create-metadata'
35

46
import { ServiceProvidersClient } from './components/ServiceProvidersClient'
57
import { SERVICE_PROVIDERS_SEO } from './constants/seo'
8+
import { generateStructuredData } from './utils/generateStructuredData'
69

710
export default function ServiceProviders() {
8-
return <ServiceProvidersClient />
11+
return (
12+
<>
13+
<StructuredDataScript
14+
structuredData={generateStructuredData(SERVICE_PROVIDERS_SEO)}
15+
/>
16+
<ServiceProvidersClient />
17+
</>
18+
)
919
}
1020

1121
export const metadata = createMetadata({
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { WebPageGraph } from '@/components/StructuredDataScript'
2+
3+
import { PATHS, type StaticPath } from '@/constants/paths'
4+
import type { StructuredDataParams } from '@/types/structured-data-params'
5+
import { generatePageStructuredData } from '@/utils/generate-page-structured-data'
6+
7+
export function generateStructuredData(
8+
seo: StructuredDataParams,
9+
): WebPageGraph {
10+
return generatePageStructuredData({
11+
title: seo.title,
12+
description: seo.description,
13+
path: PATHS.SERVICE_PROVIDERS.path as StaticPath,
14+
pageType: 'CollectionPage',
15+
})
16+
}

src/app/terms-of-use/page.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,24 @@ import { MarkdownPage } from '@filecoin-foundation/ui-filecoin/Markdown/Markdown
33
import { PageSection } from '@filecoin-foundation/ui-filecoin/PageSection'
44

55
import { Navigation } from '@/components/Navigation/Navigation'
6+
import { StructuredDataScript } from '@/components/StructuredDataScript'
67

78
import { PATHS } from '@/constants/paths'
89
import { createMetadata } from '@/utils/create-metadata'
910

1011
import { TERMS_OF_USE_SEO } from './constants/seo'
1112
import termsOfUseMarkdown from './terms-of-use.md'
13+
import { generateStructuredData } from './utils/generateStructuredData'
1214

1315
const { body } = termsOfUseMarkdown
1416

1517
export default function TermsOfUse() {
1618
return (
1719
<>
20+
<StructuredDataScript
21+
structuredData={generateStructuredData(TERMS_OF_USE_SEO)}
22+
/>
23+
1824
<Navigation backgroundVariant="light" />
1925
<PageSection backgroundVariant="light" paddingVariant="compact">
2026
<MarkdownPage>
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { WebPageGraph } from '@/components/StructuredDataScript'
2+
3+
import { PATHS, type StaticPath } from '@/constants/paths'
4+
import type { StructuredDataParams } from '@/types/structured-data-params'
5+
import { generatePageStructuredData } from '@/utils/generate-page-structured-data'
6+
7+
export function generateStructuredData(
8+
seo: StructuredDataParams,
9+
): WebPageGraph {
10+
return generatePageStructuredData({
11+
title: seo.title,
12+
description: seo.description,
13+
path: PATHS.TERMS_OF_USE.path as StaticPath,
14+
pageType: 'WebPage',
15+
})
16+
}

0 commit comments

Comments
 (0)