Skip to content

docs: add SEO optimization guide for SeeForMe#11

Open
Copilot wants to merge 2 commits into
mainfrom
copilot/create-seo-optimization-document
Open

docs: add SEO optimization guide for SeeForMe#11
Copilot wants to merge 2 commits into
mainfrom
copilot/create-seo-optimization-document

Conversation

Copilot AI commented Feb 24, 2026

Copy link
Copy Markdown
Contributor

The product lacked any SEO strategy documentation, leaving open questions on how to get search engines to index the app and how to optimize store presence.

Changes

  • Removed /docs from .gitignore — was blocking the entire docs directory from being tracked
  • Added docs/seo-guide.md — concise, actionable Chinese-language SEO guide covering:
    • ASO (App Store Optimization): title/subtitle character limits, keyword targeting, description copy template, screenshot specs, rating prompt strategy (expo-store-review)
    • Web landing page SEO: minimal page structure (/, /about, /how-it-works, /volunteer, /blog), full HTML meta tag examples (OG, Twitter Card, canonical)
    • Expo Web integration: injecting <Head> meta tags via expo-router/head scoped to Platform.OS === "web"
    • Structured data: JSON-LD MobileApplication schema for Google rich results
    • robots.txt / sitemap.xml: ready-to-use templates blocking /api/ from crawlers
    • Technical SEO checklist: HTTPS, Core Web Vitals thresholds, mobile-friendliness, image optimization (WebP + alt)
    • Content strategy: blog topic ideas segmented by audience (visually impaired users, volunteers, developers)
    • External link channels: 少数派, 公益组织, GitHub badges, Product Hunt, V2EX/掘金
    • Phased execution roadmap: immediate → 2 weeks → 1 month → ongoing
    • Monitoring tools: Google Search Console, GA4, PageSpeed Insights, Ahrefs/Semrush (optional)
Original prompt

This section details on the original issue you should resolve

<issue_title>写下一个产品seo优化的文档,具体该怎么做呢?</issue_title>
<issue_description>我们应该是不是应该上线一些seo的页面,或者说怎么让能让谷歌等其他浏览器抓取到,只能抓取到我们的应用呢?Seo优化的教程是什么样的?我们要具体实战的,要精炼的文档。</issue_description>

Comments on the Issue (you are @copilot in this section)


✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.

…gnore

Co-authored-by: leekHotline <117092932+leekHotline@users.noreply.github.com>
Copilot AI changed the title [WIP] Create document for product SEO optimization docs: add SEO optimization guide for SeeForMe Feb 24, 2026
Copilot AI requested a review from leekHotline February 24, 2026 06:49
@leekHotline leekHotline requested a review from Copilot February 24, 2026 06:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds comprehensive SEO optimization documentation for the SeeForMe mobile app, addressing the lack of search engine visibility strategy. The guide covers both app store optimization (ASO) and web landing page SEO approaches.

Changes:

  • Removed /docs from root .gitignore to enable documentation tracking
  • Added detailed Chinese-language SEO guide at docs/seo-guide.md covering ASO strategy, web SEO implementation, technical requirements, and phased execution roadmap

Reviewed changes

Copilot reviewed 1 out of 2 changed files in this pull request and generated 8 comments.

File Description
.gitignore Removed /docs exclusion to allow documentation directory to be tracked in version control
docs/seo-guide.md Comprehensive SEO guide covering app store optimization, web landing pages, meta tags, structured data, robots.txt/sitemap configuration, content strategy, and monitoring tools

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread docs/seo-guide.md
/sitemap.xml ← 站点地图
/robots.txt ← 爬虫规则
```

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide suggests creating several web landing pages (/about, /how-it-works, /volunteer, /blog, etc.) but doesn't explain that these would need to be implemented as new route files in the frontend/app directory following Expo Router's file-based routing convention.

For example:

  • /about would need app/about.tsx or app/(public)/about.tsx
  • /how-it-works would need app/how-it-works.tsx
  • /blog would need app/blog/_layout.tsx and app/blog/[slug].tsx for dynamic posts

Consider adding a brief note about the implementation approach, or referencing Expo Router documentation for creating these routes.

Suggested change
> 在当前技术栈中,这些 URL 需要在 Expo Router 中对应到 `frontend/app` 目录下的路由文件。例如:
>
> ```tsx
> frontend/
> app/
> index.tsx // 对应 /
> about.tsx // 对应 /about
> how-it-works.tsx // 对应 /how-it-works
> volunteer.tsx // 对应 /volunteer
> blog/
> _layout.tsx // 博客列表/布局
> [slug].tsx // 对应 /blog/任意文章
> ```
>
> 更多文件路由示例可参考 Expo Router 文档:<https://docs.expo.dev/routing/introduction/>

Copilot uses AI. Check for mistakes.
Comment thread docs/seo-guide.md

### 2.5 评分与评论

- 在用户完成一次成功的志愿服务后弹出评分请求(`expo-store-review`)

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide references expo-store-review package for rating prompts, but this package is not installed in frontend/package.json. Before this feature can be implemented, the package needs to be added as a dependency. Consider adding it with: pnpm add expo-store-review

Suggested change
- 在用户完成一次成功的志愿服务后弹出评分请求(`expo-store-review`
- 在用户完成一次成功的志愿服务后弹出系统评分请求(可使用 Expo 提供的评分 API 实现

Copilot uses AI. Check for mistakes.
Comment thread docs/seo-guide.md

```tsx
// frontend/app/_layout.tsx (新增 web 专属 head)
import { Head } from "expo-router/head";

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide shows importing Head from "expo-router/head", but in expo-router v6 (which is installed), the Head component should be imported from "expo-router" directly, not from a /head subpath. The correct import should be: import { Head } from "expo-router";

Additionally, note that Head is primarily meant for setting document metadata on web, and the code example correctly wraps it in a Platform.OS === "web" check, which is good practice.

Suggested change
import { Head } from "expo-router/head";
import { Head } from "expo-router";

Copilot uses AI. Check for mistakes.
Comment thread docs/seo-guide.md

### 3.3 在 Expo Web 中添加元数据

Expo Router 支持通过 `expo-router/head` 在每个路由文件里设置 `<head>` 内容:

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide also references "expo-router/head" here. As mentioned earlier, the correct import path for expo-router v6 is import { Head } from "expo-router"; not from a /head subpath.

Suggested change
Expo Router 支持通过 `expo-router/head` 在每个路由文件里设置 `<head>` 内容:
Expo Router 支持通过 `Head` 组件(从 `expo-router` 导入)在每个路由文件里设置 `<head>` 内容:

Copilot uses AI. Check for mistakes.
Comment thread docs/seo-guide.md
Comment on lines +147 to +158
import { Head } from "expo-router/head";
import { Platform } from "react-native";

// 在 RootLayout 返回值中加入(只在 web 渲染):
{Platform.OS === "web" && (
<Head>
<meta name="description"
content="SeeForMe 是一款公益 App,通过实时视频让志愿者帮助视障人士感知世界。" />
<meta property="og:image" content="https://seeforme.app/og-cover.png" />
<link rel="canonical" href="https://seeforme.app" />
</Head>
)}

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code snippet shows a JSX fragment without proper context of where it should be placed in the component. The comment says "在 RootLayout 返回值中加入" (add to RootLayout return value), but the example doesn't show the complete component structure.

For clarity, the complete pattern should show that the <Head> component needs to be added as a child within the existing component tree. Based on the current _layout.tsx structure, it could be added before or after the <GestureWrapper> component, or inside it depending on the desired scope.

Suggested change
import { Head } from "expo-router/head";
import { Platform } from "react-native";
// 在 RootLayout 返回值中加入(只在 web 渲染):
{Platform.OS === "web" && (
<Head>
<meta name="description"
content="SeeForMe 是一款公益 App,通过实时视频让志愿者帮助视障人士感知世界。" />
<meta property="og:image" content="https://seeforme.app/og-cover.png" />
<link rel="canonical" href="https://seeforme.app" />
</Head>
)}
import { Stack } from "expo-router";
import { Head } from "expo-router/head";
import { Platform } from "react-native";
export default function RootLayout() {
return (
<>
{/* 在 RootLayout 返回值中加入(只在 web 渲染) */}
{Platform.OS === "web" && (
<Head>
<meta
name="description"
content="SeeForMe 是一款公益 App,通过实时视频让志愿者帮助视障人士感知世界。"
/>
<meta property="og:image" content="https://seeforme.app/og-cover.png" />
<link rel="canonical" href="https://seeforme.app" />
</Head>
)}
{/* 其余路由与页面内容 */}
<Stack />
</>
);
}

Copilot uses AI. Check for mistakes.
Comment thread docs/seo-guide.md
Comment on lines +179 to +183
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "120"

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The JSON-LD structured data includes hardcoded rating values ("ratingValue": "4.8", "reviewCount": "120") that don't reflect actual app ratings. These should either be:

  1. Removed until the app has real ratings to report, or
  2. Clearly marked as placeholder values that need to be updated with actual data

Using fake ratings in structured data could be considered misleading and may violate search engine guidelines. It's better to omit the aggregateRating field entirely until there are real reviews.

Suggested change
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.8",
"reviewCount": "120"

Copilot uses AI. Check for mistakes.
Comment thread docs/seo-guide.md
<meta property="og:title" content="SeeForMe — 当你需要时,有人替你看见">
<meta property="og:description"
content="连接视障者与志愿者,实时视频描述世界。免费公益 App。">
<meta property="og:image" content="https://seeforme.app/og-cover.png">

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The guide uses placeholder domain "https://seeforme.app" throughout all examples (og:image, og:url, canonical links, sitemap, etc.). Before implementing these SEO recommendations, the actual production domain needs to be determined and all instances should be updated accordingly. Consider adding a note at the beginning of the document stating that "seeforme.app" is a placeholder and should be replaced with the actual domain.

Copilot uses AI. Check for mistakes.
Comment thread docs/seo-guide.md
| 项目 | 要求 | 工具 |
|------|------|------|
| HTTPS | 全站启用 | Cloudflare / 域名服务商 |
| Core Web Vitals | LCP < 2.5s,FID < 100ms,CLS < 0.1 | Google Search Console |

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Core Web Vitals thresholds mention "FID < 100ms" (First Input Delay), but as of mid-2024, Google has replaced FID with INP (Interaction to Next Paint) as a Core Web Vital. The good threshold for INP is < 200ms. Consider updating this to reflect the current Web Vitals: LCP < 2.5s, INP < 200ms, CLS < 0.1

Suggested change
| Core Web Vitals | LCP < 2.5s,FID < 100ms,CLS < 0.1 | Google Search Console |
| Core Web Vitals | LCP < 2.5s,INP < 200ms,CLS < 0.1 | Google Search Console |

Copilot uses AI. Check for mistakes.
@leekHotline leekHotline marked this pull request as ready for review February 24, 2026 07:09
@leekHotline leekHotline requested a review from Copilot February 24, 2026 07:09

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 2 changed files in this pull request and generated no new comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

写下一个产品seo优化的文档,具体该怎么做呢?

3 participants