
本文介绍一种兼顾 googlebot 索引完整性与用户体验的纯前端文本折叠方案:使用 css `line-clamp` 控制行数,通过 js 切换 class 实现“显示更多/更少”,确保搜索引擎可完整抓取原始内容。
在 Nuxt 3 项目中实现“三行截断 + 展开按钮”功能时,关键目标是:对用户友好(视觉上折叠)、对 SEO 友好(HTML 中保留全部文本,不依赖 v-if 或动态渲染隐藏内容)。这意味着不能用 v-show="false"、v-if="showAll" 或 display: none 隐藏文字——这些方式可能导致 Googlebot 无法索引被隐藏的内容。
✅ 正确做法是:所有文本始终存在于 DOM 中,仅通过 CSS 视觉截断;点击按钮仅切换 line-clamp 值,不增删节点、不修改 innerHTML。
✅ 推荐实现方案(Nuxt 3 兼容)
1. HTML 结构(服务端渲染友好)
Lorem ipsum dolor sit amet, consectetur adipiscing elit...
⚠️ 注意: 和 必须相邻(button 是 p 的紧邻兄弟节点),以便 JS 通过 previousElementSibling 准确定位。
2. CSS 样式(支持 WebKit + 回退兼容)
/* 支持 line-clamp 的基础样式 */
[class^="lines-"] {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
/* 关键:启用行数限制 */
-webkit-line-clamp: 3; /* 默认值,可被覆盖 */
}
.lines-1 { -webkit-line-clamp: 1; }
.lines-2 { -webkit-line-clamp: 2; }
.lines-3 { -webkit-line-clamp: 3; }
/* 展开状态:取消行数限制 */
.lines-all {
-webkit-line-clamp: unset;
/* 可选:重置高度以避免残留溢出 */
max-height: none;
}
/* 按钮文字动态切换 */
.show-more {
border: none;
background: none;
padding: 0;
font: inherit;
cursor: pointer;
color: #007bff;
text-decoration: underline;
}
.show-more::after {
content: 'Show More';
}
.show-more[data-show-all="true"]::after {
content: 'Show Less';
}3. JavaScript 行为(建议放在 onMounted 中)
// 在 setup() 或









