首页 > 其他分享 >next-元数据创建、更新 SEO 优化

next-元数据创建、更新 SEO 优化

时间:2024-05-15 09:42:18浏览次数:29  
标签:const title Metadata 创建 next export SEO 页面 metadata

在创建Next.js项目时,根页面会自动生成一个metadata对象,其中包含标题和描述等关键信息。每当页面被访问时,这个metadata对象会被读取并应用到HTML的默认配置中,确保页面的基本信息得以正确展示。在存在单独页面需要采用独特的标题或描述时,这些特定页面的元数据将优先于根元素所设定的全局元数据,从而进行替换操作。通过为这些页面设置独特的元数据,我们可以确保访问者或搜索引擎在访问这些页面时能够获取到最准确、最相关的信息。因此,在设计和开发网站或应用程序时,我们需要考虑如何为每个页面设置独特的元数据,并在需要时优先使用这些元数据,以提供最佳的用户体验和搜索引擎优化效果。

  • 支持对title和description进行独立的配置,以灵活满足各类页面需求。
  • 在配置优先级方面,我们遵循页面层级深度原则,即页面最深层级的设置将具有最高的优先级,而位于app/layout下的设置则享有最低的优先级。这一规则设计旨在确保页面级别的特定设置能够覆盖全局或布局级别的通用设置,从而更加精确地控制页面的标题和描述内容。
  • 仅适用于服务端渲染场景,以确保在服务器端进行页面渲染时能够正确应用优先级设置。
//app/layout.tsx 根元素中默认生成的
export const metadata: Metadata = {
  title: "defaultTitle",
  description: "I am description",
};


//app/about/details.tsx  在指定页面设置metadata
export const metadata: Metadata = {
  title: "xxxxdetails", //可以单独修改
  description: " 我是 xxxx 详情描述",//可以单独修改 ⚠️该字段只会进行合并不会进行替换
};

个性化 metadata

export const metadata: Metadata = {
    title: {
        default:'', //默认的
        absolute:'', //绝对的
        template:'%s | test' //使用模板符 进行替换
    },
}

//当前页面需要更新 title 的时候,可以根据根元素配置的 title 类型来进行个性化展示
//示例:
    // app/layout.tsx
    export const metadata: Metadata = {
        title: '子页面 title', //最终会跟页面配置的template(%s),进行替换
    }
    
    //app/about/details.tsx
    export const metadata: Metadata = {
        title: {
            absolute: '绝对子页面 title', //最终会替换跟页面的 title 直接展示
        },
    }

异步更新 metadata

import {Metadata} from "next";

//上级路由携带进来的参数
type Props = {
    params: { id: string }
    searchParams: { [key: string]: string | string[] | undefined }
}

//改函数支持异步请求
export const generateMetadata = async ({params, searchParams}: Props): Promise<Metadata> => {
    const title: string = await new Promise(resolve => {
        setTimeout(() => {
            resolve(`async title ${params.id}`)
        }, 200)
    }) 
    return {
        title: 'staticTitle' || title || params.id //取决于父级传递过来的参数
    }
}
export default function Page() {
    return <>
        示例 code
    </>
}

标签:const,title,Metadata,创建,next,export,SEO,页面,metadata
From: https://www.cnblogs.com/liyfya/p/18193159

相关文章

  • next-route
    在目录结构中,我们精心创建的每一个文件最终都会经过处理,转化为相应的页面路由。然而,值得注意的是,某些特殊文件格式在生成过程中并不会被当作路由路径来处理。app|-authloginpage.tsxpasswordpage.tsx//最后生成的路由路径//·localhost:3000/aut......
  • 创建二维动态数组
    1//#include<bits/stdc++.h>2#include<iostream>3#include<vector>4usingnamespacestd;5intmain(){6intn;7cin>>n;8//writeyourcodehere......910////1.使用一维数组模拟11//int*num=......
  • F5 BIG-IP Next Central Manager SQL注入漏洞
    F5BIG-IPNextCentralManagerSQL注入漏洞漏洞描述:该漏洞允许未经授权的攻击者通过网络远程执行恶意SQL语句,该漏洞具体存在于对API接收的参数进行处理时,没有正确的验证和过滤用户输入。Fofa:title="BIG-IPNext|CentralManager"POC:importstringimportrequestsi......
  • java poi之XWPFDocument读取word内容并创建新的word(获取表格所有图片)
    Poi的Word文档结构介绍1、poi之word文档结构介绍之正文段落一个文档包含多个段落,一个段落包含多个Runs,一个Runs包含多个Run,Run是文档的最小单元获取所有段落:Listparagraphs=word.getParagraphs();获取一个段落中的所有Runs:ListxwpfRuns=xwpfParagraph.getRuns();获取......
  • IDEA社区版(IDEA Community Edition)创建Springboot父子项目
    1.因为社区办不支持使用springSpringInitializr的方式创建项目,但是我们可以考虑使用别的方式达到效果:创建方式有3种:第一种:使用https://start.spring.io/官方URL创建项目,再导入到IDEACommunityEdition(后面简称:ideaC)。具体使用自行百度。缺点:没办法自定义springboot的......
  • RCTF 2019]Nextphp 利用phpFFI来绕过 disable_functions限制
    今天做了一道RCE+反序列化的题目,看看吧。进入题目就给出了源码点击查看代码<?phpif(isset($_GET['a'])){eval($_GET['a']);}else{show_source(__FILE__);}Rce看看,发现许多函数都被dis掉了,试试无参数rce。发现了当前目录的一些文件(1.txt是我弄上去的,......
  • 在 dynamic crm 中创建自定义报表
    一种是直接使用dynamiccrm内置的报表功能,报表向导进行创建,但可自定义的程度有限另一种就是使用SQLServerDataTools工具在VisualStudio中生成*.rdl文件再将文件导入dynamiccrm中进行使用在 但需要注意,dynamic2016/365/8.2,必须搭建VisualStudio2015环境......
  • springboot+vue创建_1
    Springboot+vue创建一、创建后台项目1.在文件夹创建一个空文件夹,在idea中打开它2.可以先修改一下file-->settings-->Maven里面的一下东西,改成自己的maven地址(以免后面pom.xml文件有问题)3.在sb_vue_mo中右键-->new-->Module,选择SpringInitializer之后自行修改我是选择了ja......
  • 前后端分离,提供蜘蛛爬行最简单方案,创建sitemap xml
    2024年5月13日11:36:01现在很多项目是vuereactangular开发的,但是百度爬虫对这样的项目支持不好,很多时候回去采用一些服务器端渲染(SSR)和静态站点生成(SSG),当然有些框架支持ssr和ssg效果不好,还有些想不不破坏项目自身的提前下的方案呢?很多年前接手一个angularjs的项目,但是......
  • 用指令创建表
    #用指令创建表CREATETABLE`user`( idINT, `name`VARCHAR(255), `password`VARCHAR(255), `birthday`DATE) CHARACTERSETutf8COLLATEutf8_binENGINEINNODB;#CREATETABLE表的名字(比如table_name)#(#field1datatype,#field2datatype,#field3datatype,#里......