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>
SEO(搜索引擎优化)主要关注的是网页的源代码内容,因为搜索引擎的爬虫会解析这个源代码来评估网页的内容和结构。在服务器端渲染(SSR)的Nuxt应用中,所有的数据都应该在服务器端获取并注入到页面源代码中,这样爬虫就能抓取到完整的页面内容。
然而,在你的情况中,看起来你正在使用客户端的JavaScript(Vue的mounted
钩子)来获取数据,这意味着数据是在页面加载到客户端后异步获取的。这种情况下,爬虫可能无法看到这些数据,因为它们是在页面加载到浏览器后才被获取的。
为了在Nuxt中实现SEO友好的数据获取,你应该在服务器端获取数据,然后将这些数据注入到页面的源代码中。你可以使用Nuxt的asyncData
或fetch
方法来在服务器端获取数据。
例如,你可以将你的fetchData
函数移动到asyncData
中,这样它将在服务器端运行,并将数据注入到页面的源代码中:
<script setup lang="ts">import { defineComponent, ref } from 'vue';import { getArticleDetail } from '~/api/article';import type { ArticleItem } from '~/types/interface';import { dateDisplay } from '~/utils/date';import { _length } from '~/utils';defineComponent({ asyncData({ $axios, params }) { try { const { data } = await $axios.$get('/api/article/detail', { params: { id: params.id } }); if (data.code !== 0) { throw new Error(data.message); } return { row: data.data as ArticleItem }; } catch (error) { // 处理错误 console.error(error); return {}; } }, setup(props) { const { row } = props; // ... 其他代码 ... }});</script>
在这个例子中,asyncData
方法会在服务器端运行,并接收当前页面的路由参数。它使用这些参数来从API获取数据,并将数据作为组件的props返回。这样,数据就可以在服务器端被注入到页面的源代码中,从而可以被搜索引擎爬虫抓取到。
注意,你还需要确保你的API支持服务器端请求,并且没有CORS或其他问题阻止服务器端从API获取数据。
另外,你的nuxt.config.ts
中已经设置了ssr: true
,这是正确的,它告诉Nuxt应用启用服务器端渲染。只要你在组件中使用asyncData
或fetch
来获取数据,Nuxt就会确保这些数据在服务器端被获取并注入到页面的源代码中。
有没有办法列出AWS中的所有资源?对于所有区域,所有资源...例如列出所有EC2实例、所有VPC、API Gateway中的所有API等...我想列出我帐户的所有资源,因为我很难找到我现在可以放弃的资源。
问题内容: 我在代码中有很多地方可以处理Alamofire请求/响应。 由于某些间歇性问题(最常见的是不稳定的网络),每个请求都可能失败。 我希望能够在重试前重试请求3次。 直接的方法是拥有类似的东西 但是,出于多种原因,我不喜欢这种方法。最明显的是,我将需要为每种请求类型实现这样的代码(并且我有15种这样的代码)。 我很想知道是否有办法做类似的事情(变化很小且非侵入性) 问题答案: 通过Swif
我正在将应用程序设置为在play store上上载,但play console显示错误,您需要为APK或Android应用程序包使用不同的版本代码,因为您已经有一个版本代码为1的应用程序包。我试着在Android系统中更改版本代码
我正在编写一个minecraft mod,当我在forge 1.8.9中运行它时,我得到了。然而,当我运行另一个mod时,这个mod可以工作。 我的mod的反编译类文件如下所示 而另一个看起来像 无论我如何构建我的mod,我的类文件永远不会像这样结束。如何让gradle混淆代码?
我有一个枚举类来存储一些像这样的分类值。 每种类型都有pydantic模型。例如: 我有这样的字典: 我有一个FastAPI路由,用户需要输入字段类型名称作为字符串(从FastAPI文档中的下拉列表),并根据选择的类型提供类型属性。如果用户选择type=“images”,则会提供相应的pydantic模型“ImageModel”供用户填写,以此类推。 选择类型名称后,有没有办法产生对应的pydan
问题内容: 这个想法是在某些情况下从另一个来源获取数据,所以我有这个存根: 失败了 [$ injector:cdep]找到循环依赖项:拦截器<-$ http 还尝试注入$ injector并使用它获取$ http,结果相同。有任何想法吗? .config就是声明: 问题答案: 注入到: 用它来获取回调函数中返回的对象。 这是一个例子