#
Website SEO
App is very well optimized with industry-standard SEO practices. There are 2 layers for SEO:
- AppSeo
- Page-level SEO
#
App SEO
App SEO is basically the global file for everything related to SEO. Can be found in app/components/seo/AppSeo.tsx
. This file contains
- global values
- incoming page-level values
#
Page-level SEO
Now each page can have few SEO entires that can be dynamic. For eg. title of a page can be dynamic.
Each page has a method to prepare page-level SEO data. Can be found in app/utils/seo
. Let's take home page as an example...
If you goto app/utils/seo/home.ts
, you will find a method returning few entries.
// http://localhost:3000/
export const prepareHomePageSeo = (): IAppSeoProps => {
return {
title: 'Home',
description: 'Home',
canonical: `${appConfig.global.baseUrl}${getHomePageUrl()}`,
keywords: [''],
}
}
Now these entries will be passed on to AppSeo.tsx
, that component will create a final SEO package and dump at the head of the page.
What else can a page SEO method return?
title: string
description: string
canonical: string
keywords: string[]
noIndex?: boolean
noFollow?: boolean
openGraph?: {
title?: string
description?: string
}
twitter?: {
card?: 'summary' | 'summary_large_image'
title?: string
description?: string
}
imageUrl?: string
structuredData?: {
breadcrumbList?: { [key: string]: any }
FAQs?: { [key: string]: any }
product?: { [key: string]: any }
}
Let's understand what these keys mean
Key | Description |
---|---|
title |
Title of the page |
description |
Page description |
canonical |
Page's canonical URL. Should be absolute. |
keywords |
A list of keywords for the page. |
noIndex |
Should the page be indexed? If no, set this to true. |
noFollow |
Should the page be followed? If no, set this to true. |
openGraph |
This is to control page's meta information for OpenGraph/Facebook. For eg. you might want page title to be different when link is previewed. |
openGraph.title |
Title for OpenGraph. |
openGraph.description |
Description for OpenGraph. |
twitter |
This is to control page's meta information for Twitter. For eg. you might want page title to be different when link is previewed. |
twitter.card |
Should the card be of default size or large? Possible values: 'summary' | 'summary_large_image' |
twitter.title |
Title for Twitter. |
twitter.description |
Description for Twitter. |
imageUrl |
A page can also have a image URL. For eg. on product page. Should be absolute. |
structuredData |
By default, each page will have the following structured data: |
structuredData.breadcrumbList |
For eg. on individual catalogue page, you might need to show the catalogue index page. Reference |
structuredData.FAQs |
Added on FAQ page. Reference |
structuredData.product |
Added for product pages. Reference |