summaryrefslogtreecommitdiff
path: root/src/utils/seo/common.ts
diff options
context:
space:
mode:
authorrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
committerrxliuli <rxliuli@gmail.com>2025-11-04 05:03:50 +0800
commitbce557cc2dc767628bed6aac87301a1be7c5431b (patch)
treeb51a051228d01fe3306cd7626d4a96768aadb944 /src/utils/seo/common.ts
init commit
Diffstat (limited to 'src/utils/seo/common.ts')
-rw-r--r--src/utils/seo/common.ts75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/utils/seo/common.ts b/src/utils/seo/common.ts
new file mode 100644
index 0000000..8873dbd
--- /dev/null
+++ b/src/utils/seo/common.ts
@@ -0,0 +1,75 @@
+import type { Opt } from '@jet/environment/types/optional';
+import type { Organization } from 'schema-dts';
+import type { WebRenderablePage } from '@jet-app/app-store/api/models/web-renderable-page';
+
+import type I18N from '@amp/web-apps-localization';
+import type { SeoData } from '@amp/web-app-components/src/components/MetaTags/types';
+
+export const MAX_DESCRIPTION_LENGTH = 160;
+
+export const AppleOrganization: Organization = {
+ '@type': 'Organization',
+ name: 'Apple Inc',
+ url: 'http://www.apple.com',
+ logo: {
+ '@type': 'ImageObject',
+ url: 'https://www.apple.com/ac/structured-data/images/knowledge_graph_logo.png',
+ },
+};
+
+export function updateCanonicalURL(
+ page: WebRenderablePage,
+ canonicalURL: string,
+): void {
+ const seoData = page.seoData as Opt<SeoData>;
+
+ if (!seoData) {
+ return;
+ }
+
+ seoData.url = canonicalURL;
+}
+
+export function seoDataForAnyPage(
+ page: WebRenderablePage,
+ i18n: I18N,
+): SeoData {
+ const pageTitle =
+ 'title' in page
+ ? i18n.t('ASE.Web.AppStore.Meta.TitleWithPlatformAndSiteName', {
+ title: page.title,
+ platform: getPlatformFromPage(page),
+ })
+ : i18n.t('ASE.Web.AppStore.Meta.SiteName');
+
+ const description = i18n.t('ASE.Web.AppStore.Meta.Description');
+
+ return {
+ url: page.canonicalURL ?? '',
+ siteName: i18n.t('ASE.Web.AppStore.Meta.SiteName'),
+
+ pageTitle,
+ socialTitle: pageTitle,
+ appleTitle: pageTitle,
+
+ description,
+ socialDescription: description,
+ appleDescription: description,
+
+ width: 1200,
+ height: 630,
+ twitterWidth: 1200,
+ twitterHeight: 630,
+ twitterCropCode: 'wa',
+ crop: 'wa',
+ fileType: 'jpg',
+ artworkUrl: '/assets/images/share/app-store.png',
+
+ twitterSite: '@AppStore',
+ };
+}
+
+export function getPlatformFromPage(page: WebRenderablePage): Opt<string> {
+ return page.webNavigation?.platforms.find((platform) => platform.isActive)
+ ?.action.title;
+}