nuxt3 axios 请求出来的数据在源代码中没有这也没有办法 SEO 呀?

作者站长头像
站长
· 阅读数 4

nuxt.config.ts 中的 ssr 也是 true

自己写的后台接口

页面显是正常的,但是右键, 查看源代码后里面没有请求回来的数据呀!

这能 SEO ?

是哪里还需要配置下吗?

nuxt.config.ts代码:

export default defineNuxtConfig({
    app: {
        head: {
            charset: 'utf-8',
            viewport: 'width=device-width, initial-scale=1',
        }
    },
    devtools: {enabled: false},
    //关闭遥测数据
    telemetry: false,
    modules: ['@pinia/nuxt'],
    css: [
        "@/assets/style/style.css"  //配置使用的样式
    ],
    ssr:true,
})

页面代码:

<template>
    <div id="body">
        <div class="container">
            <div id="main">
                <article class="post" v-if="_length(row)>0">
                    <h1 class="center">{{row.title}}</h1>
                    <ul class="post-meta">
                        <li>
                            <time>{{dateDisplay(row.created_at)}}</time>
                        </li>
                        <li><a :href="row.url">默认分类</a>
                        </li>
                        <li><a>{{row.views}}</a> 阅读</li>
                        <li><a href="#comments">评论</a></li>
                    </ul>
        <div class="post-content" v-html="row.content"></div>
        <p class="tags">标签: <a v-for="tag in row.tag" :href="getTagUrl(tag)">{{tag}}</a></p>
        <div class="post-near">
            <li class="post-left">没有了</li>
            <li class="post-right">没有了</li>
        </div>
        <div class="clearfix"></div>
    </article>
            </div>
        </div>
    </div>
</template>
<script setup lang="ts">
import {onMounted,ref} from "vue";
import {getArticleDetail} from "~/api/article";
import type {ApiResponse,ArticleItem} from "~/types/intreface";
import {dateDisplay} from "~/utils/date";
import {_length} from "~/utils";
import { useRoute } from '#app';

const route = useRoute();
const params = route.params;
const id = ref(params.id);
const loading = ref(false);
const row = ref<ArticleItem>();
onMounted(async()=>{
    await fetchData();
})
const fetchData = async()=>{
    try {
        loading.value = true;
        const data:ApiResponse = await getArticleDetail({id:id.value});
        if(data.code!==0){
            return Promise.reject(data.message);
        }
        row.value = data.data as ArticleItem;
        if(_length(row.value.url)===0){
            row.value.url = '/archives/'+row.value.slug;
        }
        useHead({
            title: row.value.title,
            meta: [
                { name: 'description', content: '我的神奇网站。' }
            ],
            bodyAttrs: {
                class: 'test'
            },
            script: [ { innerHTML: 'console.log(\'Hello world\')' } ]
        })
    }catch (e) {
        loading.value = false;
    }
}
</script>
<style scoped lang="less">

</style>
回复
1个回答
avatar
test
2024-06-19

生命周期问题。 onMounted 里面的请求不会在 SSR 阶段发起。

Nuxt 2 - Nuxt Lifecycle 这样有演示的生命周期的文档没有在Nuext3里面找到,但是看2的也是一样的。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容