nuxt 如何生成sitemap.xml 动静态站点地图

news2025/8/3 6:41:19

前言

sitemap.xml的作用是将我们网站的所有页面都被SEO(浏览器搜索引擎)收录,我们网站的内容更容易被用户搜到,同时增加我们的网站的知名度,排名更靠前。简言之就是用技术做网站推广,所以对于网站推广sitemap站点地图的这门技术还是很重要滴,实现过程有点小繁琐,但是却不难,废话不多说,我们开始今天的教程吧。

操作流程

1、安装依赖

npm install @nuxtjs/sitemap

此链接是sitemap在npm上的官方文档

2、打开nuxt.config.js,将其依赖添加进去,代表我们整个项目使用这个依赖

注意:之前引入的依赖不用删,只需要将sitemap加在后面

{
  modules: [
    '@nuxtjs/sitemap'
  ],
}

3、进入static文件夹,创建sitemap.js,内容如下

1、各配置项的讲解
import axios from "axios";  // 引入axios,动态生成站点地图需要用到
const sitemap = {
  path: "/sitemap.xml", //生成的文件路径
  hostname: "http://www.baidu.com/", // 你的网站地址
  cacheTime: 1000 * 60 * 60 * 24, //一天的更新频率,只在generate:false有用
  gzip: true, //用gzip压缩优化生成的 sitemap.xml  文件 
  generate: false, 
  exclude: [], //排除不需要收录的页面,这里的路径是相对于hostname, 例如: exclude: ['/404',...]
  // 每个对象代表一个页面,这是默认的
  defaults: {
    changefred: "always", // 收录变化的时间,always 一直,daily 每天
    lastmod: new Date(), // 生成该页面站点地图时的时间
    priority: 1, // 网页的权重  1是100%最高,一般给最重要的页面,不重要的页面0.7-0.9之间
  },
  routes: async () => {
    return routes
  },
};
export default sitemap;
2、生成静态代码

这里主要放那种不需要携带的页面,示例: http://www.baidu.com/pressCenter,每个对象的url的前缀是自动相对上面hostname网站地址的,所以只需要写你的路由就行。

 routes: async () => {
    // 静态路由
    let routes = [
      {
        url: `/`,
        changefred: "daily",
        lastmod: new Date(),
        priority: 1,
      },
      {
        url: `/pressCenter`,
        changefred: "daily",
        lastmod: new Date(),
        priority: 0.9,
      },
    ];
    return routes
   }
3、生成动态代码

动态指的是类似详情页这种 http://www.baidu.com/detail?id=1 ,这种是根据后端数据自动生成的,不可能手动一个一个去加,那样就太机械了,不符合我们写程序的风格,所以这一小节就是讲如何生成动态站点地图。

    let axiosUrl = "你的接口请求前缀";  // 示例 "http://www.baidu.cn/api/"
    let prodRoutes = [];
    let newsRoutes = [];

    // Promist.all并发调接口  所有异步接口同时调用,缩短生成站点地图的时间,通过解构取出接口返回的数据
    let [productList, newsList] = await Promise.all([
      axios.get(axiosUrl + "product/list"),
      axios.get(axiosUrl + "news/list"),
    ]);
   
    // 商品详情   
    /* 200状态码判断这块属于代码优化  成功才进来,否则之间打印错误信息,由于nuxt有时出问题能提供给我们的信息非常匮乏,
    	假设某天接口出问题,到时很难定位问题,所以加这个主要是方便我们后期的维护。  */
    if (productList.data.code == 200) {
      let proList = productList.data.rows; // 这个对应接口返回的列表
      // 用map将列表里的每个对象的id组装同时生成新的对象,每个对象生成后的样子,见下面标注1
      prodRoutes = proList.map((item) => {
        return {
          url: `/product/twoPage/threePage?id=${item.id}`,
          changefred: "daily",
          lastmod: new Date(),
          priority: 1,
        };
      });
    } else {
      console.log(productList.data.msg, "sitemap调用错误+productList");
    }

    // 文章详情
    if (newsList.data.code == 200) {
      let newsArr = newsList.data.rows;
      newsRoutes = newsArr.map((item) => {
        return {
          url: `/pressCenter/article?id=${item.id}`,
          changefred: "daily",
          lastmod: new Date(),
          priority: 1,
        };
      });
    } else {
      console.log(newsList.data.msg, "sitemap调用错误+newsList");
    }
    // 最后统一将所有组装好的数组合并到总数组中,记住传入合并的数组顺序要跟Promise.all调用接口的顺序一致,否则会出问题
    // 合并后的样子 见下面标注2
    return routes.concat(prodRoutes, newsRoutes);

标注1

// 示例:某一路由对象生成后的样子
   	   {
         url: `/pressCenter/article?id=1`,
         changefred: "daily",
         lastmod: new Date(),
         priority: 1,
       }

标注2
routes.contact是数组合并的方法,我们可以利用它将静态和动态站点对象合并到一个路由数组,sitemap最终会拿这个数组去处理成真正的sitemap.xml数据

[
    {
       url: `/`,
       changefred: "daily",
       lastmod: new Date(),
       priority: 1,
   },
   {
       url: `/product/twoPage/threePage?id=1`,
       changefred: "daily",
       lastmod: new Date(),
       priority: 1,
   },
   {
       url: `/pressCenter/article?id=1`,
       changefred: "daily",
       lastmod: new Date(),
       priority: 1,
   },
   ...
]

4、在nuxt.config.js引入并全局使用sitemap.js 配置文件

// nuxt.config.js
import sitemap from "./static/sitemap";
// sitemap跟modules是同级的,一般放在modules的上面或者下面
 modules: [
    "@nuxtjs/sitemap"
  ],
sitemap: sitemap,

5、sitemap.js完整代码

import axios from "axios";  //
const sitemap = {
  path: "/sitemap.xml", //生成的文件路径
  hostname: "http://www.baidu.com/", //网站的网址
  cacheTime: 1000 * 60 * 60 * 24, //一天的更新频率,只在generate:false有用
  gzip: true, //用gzip压缩优化生成的 sitemap.xml  文件 
  generate: false,
  exclude: [], //排除不要的页面,这里的路径是相对于hostname
  defaults: {
    changefred: "always",
    lastmod: new Date(),
  },
  routes: async () => {
    // 静态路由
    let routes = [
      {
        url: `/`,
        changefred: "daily",
        lastmod: new Date(),
        priority: 1,
      },
      {
        url: `/pressCenter`,
        changefred: "daily",
        lastmod: new Date(),
        priority: 0.9,
      },
    ];

    // 以下都是动态路由
    let axiosUrl = "你的接口请求前缀";  // 示例 "http://www.baidu.com/api/"
    let prodRoutes = [];
    let newsRoutes = [];

    // 并发调接口
    let [productList, newsList, categoryList] = await Promise.all([
      axios.get(axiosUrl + "product/list"),
      axios.get(axiosUrl + "news/list"),
    ]);

    // 商品详情
    if (productList.data.code == 200) {
      let proList = productList.data.rows;
      prodRoutes = proList.map((item) => {
        return {
          url: `/product/twoPage/threePage?id=${item.id}`,
          changefred: "daily",
          lastmod: new Date(),
          priority: 1,
        };
      });
    } else {
      console.log(productList.data.msg, "sitemap调用错误+productList");
    }

    // 文章详情
    if (newsList.data.code == 200) {
      let newsArr = newsList.data.rows;
      newsRoutes = newsArr.map((item) => {
        return {
          url: `/pressCenter/article?id=${item.id}`,
          changefred: "daily",
          lastmod: new Date(),
          priority: 1,
        };
      });
    } else {
      console.log(newsList.data.msg, "sitemap调用错误+newsList");
    }

    return routes.concat(prodRoutes, newsRoutes);
  },
};
export default sitemap;

6、如何生成sitemap.xml文件

1、将nuxt 项目启动
  • 打开 static -> robots.txt 文件,还没robots.txt文件的点我进入教程,加两个Sitemap属性,一个本地项目地址和一个线上地址。生成sitemap.xml文件时 需要把线上的地址用#号注释掉,然后将本地的链接 例如 http://192.168.1.193/sitemap.xml 放到浏览器访问一下,193对应你的主机ip。
User-agent: *
Disallow:
# Sitemap: http://www.baidu.com/sitemap.xml
Sitemap: http://192.168.1.193/sitemap.xml
2、访问后是这个样子,然后CTRL + S 保存sitemap.xml到桌面,至此sitemap.xml生成的步骤到此就结束啦。

<loc>标签中的网站地址是根据sitemap.js中的hostname设置的值
在这里插入图片描述

3、生成完毕后将robots.txt 的sitemap改为线上地址
User-agent: *
Disallow:
Sitemap: http://www.baidu.com/sitemap.xml
# Sitemap: http://192.168.1.193/sitemap.xml
4、nuxt前端npm run build:prod打个包给后端

7、如何将sitemap.xml上传到服务器

这里以服务器Nginx为例

1、上传到这里

在这里插入图片描述

2、 在Nginx的配置文件配置sitemap.xml的访问路径

在这里插入图片描述
配置完Nginx reload重载一下,然后打开网页 你的网址/sitemap.xml 看能否访问,可以的话说明你的网站已经被百度成功收录啦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15945.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JVM【类加载与GC垃圾回收机制】

JVM【类加载与GC垃圾回收机制】&#x1f34e;一.JVM&#x1f352;1.1JVM简介&#x1f352;1.2JVM执行流程&#x1f34e;二.JVM运行时数据区&#x1f352;2.1 程序计数器(线程私有)&#x1f352;2.2 栈(线程私有)&#x1f352;2.3 堆(线程共享)&#x1f352;2.4 方法区(线程共享…

Matlab图像处理基础(part 1)

目录 0. 概要 1. 图像表示 Image Representation 1.1 图像格式 Image format 1.2 图像分辨率 resolution of image 1.3 图像的编码 1.4 Matlab图像加载、显示和保存 1.5 Image Information 1.6 图像格式转换 1.7 其它类型的像素 1.8 像素数值格式 1.9 图像数据的访问…

vue实现防抖函数、节流函数,全局使用【输入框、按钮】

博主介绍 &#x1f4e2;点击下列内容可跳转对应的界面&#xff0c;查看更多精彩内容&#xff01; &#x1f34e;主页&#xff1a;水香木鱼 &#x1f34d;专栏&#xff1a;后台管理系统 文章目录 简介&#xff1a;这是一篇有关【vue实现防抖函数、节流函数&#xff0c;全局使用…

第一章《初学者问题大集合》第4节:Java程序是如何执行的

想要学好Java编程,就必须先弄清楚Java程序是如何执行的。首先来解释一个最基本的概念:什么是程序?把你想让计算机做的事情用编程语言一条条列出,这个由多条编程语言所组成的“代码序列”就是程序。 那么Java程序又是如何运行的呢?这个过程如图1-1所示。 图1-1 Java程序运…

C语言小游戏之三子棋(井字棋)(1.5w字超详细讲解)

hello&#xff0c;csdn的伙伴们&#xff0c;大家好&#xff0c;我们已经学习到了分支与循环&#xff0c;函数&#xff0c;数组这三大块知识&#xff0c;那么我们现在就可以尝试综合运用前面所学的知识&#xff0c;来完成一个简单的小游戏-----三子棋&#xff08;井字棋&#xf…

Allegro DFM Ravel Rule工具使用指导书

Allegro DFM Ravel Rule工具使用指导书 Allegro任何一个版本都支持DFM Ravel Rule检查,即便是166的版本 打开后的界面如下所示 可以检查项目 测试点,阻焊,走线,丝印,过孔,milling,装配,outline相关的DFM检查 可以让违反规则的设计处以DRC的形式报出来 避免加工问题 …

基于数字孪生打造智慧园区运营平台,助力园区数字化转型

在各行各业数字化转型的浪潮中&#xff0c;园区也在经历数字化转型发展&#xff0c;从传统园区向智慧园区不断演进。传统园区缺乏系统性规划&#xff0c;基于单点功能建设&#xff0c;存在系统孤立、管理粗放且服务不足等问题&#xff0c;难以满足人们日益增长的多样化需求。在…

第四章. Pandas进阶—数据合并

第四章. Pandas进阶 4.6 数据合并 数据合并主要使用的是Merge方法和Concat方法 1.数据合并(merge函数) 1).语法&#xff1a; pandas.merge(right,how‘inner’, on“None”, left_on“None”, right_on“None”, left_indexFalse, right_indexFalse... )参数说明: right&…

甘露糖-聚乙二醇-马来酰亚胺 mannose-PEG-MAL 马来酰亚胺-PEG-甘露糖

甘露糖-聚乙二醇-马来酰亚胺 mannose-PEG-MAL 马来酰亚胺-PEG-甘露糖&#xff0c;溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等。在水中有很好的溶解性 中文名称&#xff1a;甘露糖-马来酰亚胺 英文名称&#xff1a;mannose-MAL 别称&#xff1a;…

【LeetCode 每日一题】53. 最大子数组和

01 题目描述 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 02 示例 示例1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5…

从 React 源码彻底搞懂 Ref 的全部 api

ref 是 React 里常用的特性&#xff0c;我们会用它来拿到 dom 的引用。 它一般是这么用的&#xff1a; 函数组件里用 useRef&#xff1a; import React, { useRef, useEffect } from "react";export default function App() {const inputRef useRef();useEffect(…

几乎涵盖了近半年90%的Java面试题,可以肝起来了

前言 很多人在问&#xff1a;八股文还有必要背吗&#xff1f; 近半年来大家听到的、用到的不少&#xff0c;带来的争议也不断。 有人奉为面试神器&#xff0c;全文背诵。有人觉得八股文铺天盖地实际作用不大&#xff0c;还害人不浅… 我觉得不是背不背八股文的问题&#xff0c…

【机器学习并行计算】2 parameter server参数服务器

使用ps实现异步梯度下降。 14年提出的。 异步 vs 同步 可以看出异步运行效率非常高。 异步梯度下降的流程 ps架构流程 worker&#xff1a; 首先从参数服务器拉取最新的参数&#xff1b;然后用自己节点上的数据计算梯度&#xff1b;最后把梯度推给参数服务器参数服务器&#xf…

最快速的文件传输软件,解析镭速文件传输软件

想到每天都需要进行文件传输&#xff0c;就会烦躁&#xff0c;要是有一夸最快速的文件传输软件的话&#xff0c;这样就可以节省大量的时间了&#xff0c;那么针对于用户的这一个需求&#xff0c;我们来介绍一下镭速的文件传输软件&#xff0c;看是否是那么快&#xff0c;快到你…

无监督端到端框架:IVIF

VIF-Net: An Unsupervised Framework for Infrared and Visible Image Fusion &#xff08; VIF-Net: 红外和可见光图像融合的无监督框架&#xff09; &#xff08;本文理解上的难易程度&#xff1a;易&#xff09; 在本文中&#xff0c;我们提出了一种用于红外和可见图像融合…

css 动画实现节流效果

今天在做节流操作时&#xff0c;无意间看到可以用css动画去实现节流效果&#xff0c;然后一顿操作发现果然可以&#xff0c;记录一下 CSS pointer-events 属性 一、 用css中的pointer-events&#xff08;指针事件&#xff09;、animation&#xff08;动画&#xff09;以及:act…

WordPress做缓存Memcached Is Your Friend+Batcache

宝塔面板有两个地方有Memcached,一个是在软件商店的运行环境里面,一个是在php扩展里面,我们先安装PHP扩展中的Memcached ,然后wp后台搜索Memcached Is Your Friend安装插件。WordPress做缓存很给力。缓存命中率保持在 90%以上的WordPress 本地缓存加速方案。 默认我们看到命…

E-Payment Integrator Delphi Edition

E-Payment Integrator Delphi Edition 通过为组件提供处理信用卡和电子支票交易的直观界面&#xff0c;减轻了集成电子支付支持的复杂性。开发人员无需学习复杂的套接字编程或安全实现。通过使用电子支付集成器&#xff0c;开发人员能够针对当前支持的任何支付网关进行定位和开…

比较复杂的策略路由综合实验

下面是网络技能大赛策略这个模块的要求&#xff0c;单独拿出来整理一下 R1、R2、R3间运行OSPF&#xff0c;进程号20&#xff0c;规划单区域&#xff1a;区域0&#xff1b; VSU、R2、R3间运行OSPF&#xff0c;进程号21&#xff0c;规划单区域&#xff1a;区域0&#xff1b; …

JavaScript之事件高级(53rd)

1、注册事件(绑定事件) 给元素添加事件&#xff0c;称为注册事件或者绑定事件。 注册事件有两种方式&#xff1a;传统方式和方法监听注册方式 1、addEventListener事件监听方式 1、eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget&#xff08;目标对…