互联网从业者充电站 头像

消息来源频道

互联网从业者充电站

@https1024

频道28,610 位成员公开可见持续更新

互联网从业者专属 内容多为技术、产品、设计、运营等不同话题内容; 目标人群为程序员、设计师、产品经理、运营管理等不同职能。 投稿/合作: @inside1024_bot 内容来源网络

成员规模28,610 位成员
在线情况待同步
消息总数32,672 条消息
浏览量总数5,084,371 次浏览

在这个频道里搜索消息……

t.me/https1024

用Lovable生成内链聚合清单页的时候由于数量太多,最底下的内容折叠了
怕用JS加载影响爬虫Crawling于是想办法怎么解决,其实也简单:1. 把折叠部分全展开(这样页面很长会有点丑);2. 用分页(SEO不太友好);3. 用无限滚动(SEO更不友好)
然后把问题甩给了Lovable(Chat功能),给出了下面回答:
“我理解你的需求!你希望所有声音都直接显示在页面上以便搜索引擎爬虫索引,而不是隐藏在"Show More"按钮后面。这是一个很好的SEO考虑。
让我先查看一下当前的实现:
现在我明白问题了。当前代码在第18-29行使用了 INITIAL_DISPLAY = 50 来限制初始显示的声音数量,这会导致SEO问题。
## 问题分析
SEO的关键问题:
1. ❌ 搜索引擎爬虫通常不会点击按钮或执行JavaScript交互
2. ❌ 隐藏在"Show More"后的内容可能不会被索引
3. ❌ 即使爬虫执行JS,也可能只抓取初始加载的内容
## 解决方案对比
### 方案一:直接显示所有声音(最简单,SEO最好)
优点:
- ✅ 所有内容立即可见,100% SEO友好
- ✅ 用户体验好,无需点击加载
- ✅ 代码最简单
潜在问题:
- ⚠️ 页面可能很长(但现在是紧凑列表,影响不大)
- ⚠️ 初始渲染时间稍长(但52个列表项性能影响很小)
实现方式:
```tsx
// 移除 INITIAL_DISPLAY 逻辑,直接显示所有
const displayedCelebrities = sortedCelebrities;
```
---
### 方案二:服务端渲染(SSR)所有内容 + 客户端折叠
优点:
- ✅ HTML中包含所有链接(爬虫可索引)
- ✅ 用户可以选择折叠/展开(改善视觉体验)
- ✅ 最佳的SEO和用户体验平衡
实现方式:
```tsx
// 所有内容都在DOM中,但可以通过CSS或折叠状态控制显示
{sortedCelebrities.map(...)} {/ 渲染全部 /}
```
---
### 方案三:使用 `` 标签(原生HTML折叠)
优点:
- ✅ 内容在HTML中,SEO友好
- ✅ 无需JavaScript即可折叠/展开
- ✅ 语义化HTML
示例:
```tsx
Show All 52 Voices
{sortedCelebrities.map(...)}
```
---
## 推荐方案:方案一(直接显示所有)
理由:
1. 现在使用的是紧凑列表视图,不是大卡片,52个条目不会让页面太长
2. 多列布局(桌面端4列)进一步节省空间
3. 搜索和筛选功能可以让用户快速找到需要的声音
4. 代码最简洁,维护成本最低
5. 性能影响极小(52个简单列表项)
## 实施计划
### 修改 src/components/Library/CategorySection.tsx
改动内容:
1. 移除 INITIAL_DISPLAY 常量(第18行)
2. 移除 showAll 状态(第19行)
3. 简化 displayedCelebrities 为直接显示所有(第25-27行)
4. 移除 hasMore 判断(第29行)
5. 删除"Show All"和"Show Less"按钮(第60-84行)
新的代码逻辑:
```tsx
export const CategorySection = ({ title, description, celebrities, icon }: CategorySectionProps) => {
const sortedCelebrities = [...celebrities].sort((a, b) =>
a.name.localeCompare(b.name)
);
return (
{/ 标题和描述保持不变 /}
{sortedCelebrities.map((celebrity) => (
))}
);
};
```
### SEO 优化效果
所有声音链接都在HTML中,爬虫可以直接索引
每个声音都有独立的链接/voice-generator/{slug}
分类标题和描述帮助搜索引擎理解页面结构
语义化的section和heading标签提升SEO
无JavaScript依赖,即使JS禁用也能看到所有内容
### 用户体验提升
无需点击加载,所有内容一目了然
搜索筛选功能让用户快速找到需要的声音
多列布局保持页面紧凑
滚动流畅,52个列表项不会影响性能
### 文件修改清单
1. 修改 src/components/Library/CategorySection.tsx
- 移除状态管理和限制逻辑
- 删除按钮组件
- 简化为直接渲染所有声音
Implement the plan”
————————————
方案二和方案三其实都是方案一的变体,只不过在没看到之前我也不知道还能这样操作(最后当然还是选了方案一,最简单,且实在嫌弃页面太长还可以调整每行数量)
虽然最后也没提到我想到的方案,不过是真能解决,谁会嫌这样的回答AI味浓呢
学理论和通识SEO可以看书看网上的材料,想学Practice真的建议多用Lovable的chat功能,讲明白后还演示给你看