Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 
 

55 Zeilen
1.9 KiB

  1. /**
  2. * 原 PC 站 SEO 基线。
  3. *
  4. * 已上线页面继续沿用旧站的标题分隔符、默认描述与关键词,避免重构后
  5. * 搜索引擎把同一页面识别成一套全新的内容。新功能页可继续使用自己的 TDK。
  6. */
  7. export const LEGACY_SITE_URL = 'https://tool.aionline.cc'
  8. export const LEGACY_DEFAULT_DESCRIPTION = 'AI在线是一个 AI 工具的集合地,可以找到各种各样的 AI 工具,满足你的不同需求。无论你是想翻译一段文字,还是想生成一篇文章,或者是想制作一张图片,AI在线都能为你提供帮助, AI 工具大全宝库!'
  9. export const LEGACY_DEFAULT_KEYWORDS = 'AI,AI在线,AI伙伴,免费AI网站'
  10. /** 原站非首页统一使用「页面标题_AI在线」 */
  11. export function legacyPageTitle(title) {
  12. return `${String(title || 'AI在线').trim()}_AI在线`
  13. }
  14. /**
  15. * 沿用旧 PC 站的应用 TDK 数据源:后台 app.page_title/description/keywords。
  16. * 本地开发库未配置旧应用时使用线上旧站当前 TDK 作为兜底。
  17. */
  18. export function useLegacyAppSeo({
  19. appKey,
  20. fallbackTitle,
  21. fallbackDescription = LEGACY_DEFAULT_DESCRIPTION,
  22. fallbackKeywords = LEGACY_DEFAULT_KEYWORDS,
  23. canonicalPath,
  24. }) {
  25. const { post } = useApi()
  26. const asyncData = useAsyncData(`legacy-app-seo-${appKey}`, () =>
  27. post('/app/getdetail', { key: appKey }).catch(() => ({ data: {} })))
  28. const appInfo = computed(() => asyncData.data.value?.data || {})
  29. const title = computed(() =>
  30. legacyPageTitle(appInfo.value.page_title || fallbackTitle))
  31. const description = computed(() =>
  32. appInfo.value.description || fallbackDescription)
  33. const keywords = computed(() =>
  34. appInfo.value.keywords || fallbackKeywords)
  35. useSeoMeta({
  36. title,
  37. description,
  38. keywords,
  39. })
  40. if (canonicalPath) {
  41. useHead({
  42. link: [{ rel: 'canonical', href: `${LEGACY_SITE_URL}${canonicalPath}` }],
  43. })
  44. }
  45. return asyncData
  46. }