You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Astro.build中如何获取页面内容生成meta描述?

在Astro项目中获取当前页面内容生成Meta描述

场景1:普通Astro页面(非Markdown/MDX)

对于纯Astro组件页面,需要先将页面内容存入变量,再传入createDescription函数:

---
import Layout from "../layouts/app.astro"
import { createDescription } from "./getContents.ts";

// 初始化变量存储页面内容
let pageContent = '';
---
<Layout
    description={createDescription(pageContent)}
>
    {pageContent = `
        <div class="page-content">
            这是页面的第一段核心内容,会被提取为Meta描述。
            
            这是第二段内容,不会被纳入描述范围。
        </div>
    `}
</Layout>

场景2:基于Content Collections的Markdown/MDX页面

如果页面由Astro Content Collections管理的Markdown/MDX文件生成,可直接从entry对象获取原始文本内容:

先优化createDescription函数,增强兼容性:

export function createDescription(content: string) {
    // 移除HTML标签(处理渲染后的内容)
    const plainText = content.replace(/<[^>]*>/g, '');
    // 分割段落并过滤空行
    const paragraphs = plainText.split('\n\n').filter(p => p.trim().length > 0);
    // 返回第一段或默认描述
    return paragraphs[0]?.trim() || '你的默认页面描述';
}

页面中获取内容并生成描述:

---
import Layout from "../layouts/app.astro"
import { createDescription } from "./getContents.ts";
import { getEntryBySlug } from 'astro:content';

// 根据slug获取对应内容条目
const entry = await getEntryBySlug('your-collection-name', 'post-slug');
// 获取原始文本内容
const rawContent = entry.body;
const desc = createDescription(rawContent);
---
<Layout description={desc}>
    <Content entry={entry} />
</Layout>

场景3:在Layout组件中自动生成描述

可以把描述生成逻辑封装到Layout组件,自动从插槽内容提取:

在layouts/app.astro中:

---
import { createDescription } from "../getContents.ts";

export interface Props {
    description?: string;
}

const { description } = Astro.props;
// 渲染默认插槽并获取内容
const slotHtml = await Astro.slots.render('default');
// 优先使用传入的description,否则自动生成
const finalDesc = description || createDescription(slotHtml);
---
<html>
<head>
    <meta name="description" content={finalDesc} />
</head>
<body>
    <slot />
</body>
</html>

页面无需手动处理描述,直接使用Layout即可:

---
import Layout from "../layouts/app.astro"
---
<Layout>
    这是页面第一段内容,会被自动提取为Meta描述。
    
    这是页面其他内容。
</Layout>

内容的提问来源于stack exchange,提问作者Keygun2k1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 18:31:01