当前位置: 首页 > news >正文

SEO炼金术(4)| Next.js SEO 全攻略

在上一篇文章 SEO炼金术(3)| 深入解析 SEO 关键要素 中,我们深入解析了 SEO 关键要素,包括 meta 标签、robots.txtcanonicalsitemap.xmlhreflang,并探讨了它们在搜索引擎优化(SEO)中的作用。然而,对于使用 Next.js 开发的网站,手动管理这些 SEO 相关的配置可能会非常繁琐。

幸运的是,Next.js 内置了丰富的 SEO 支持,能够自动化和简化这些优化过程。本文将全面介绍 Next.js 提供的 SEO 相关功能,并通过示例演示如何在 Next.js 项目中正确配置 metadatacanonicalrobots.txtsitemap.xmlhreflang,确保你的网站能够在搜索引擎中获得最佳表现。🚀


📌 1. Next.js 的 SEO 相关功能

Next.js 提供了多种 SEO 相关的工具,使开发者无需手动编写 HTML head 标签,而是通过 配置和 API 自动生成正确的 SEO 标记。

📌 Next.js SEO 主要功能概览

SEO 需求Next.js 提供的解决方案作用
标题 <title>meta标签metadata API设置页面标题、描述等
避免重复 URL(canonicalmetadata API (canonical 字段)规范化 URL,防止 SEO 权重分散
控制爬取与索引(robots.txtmeta robotsrobots.ts设定爬虫访问规则
**自动生成 sitemap.xml`sitemap.(xmljs
多语言 SEO(hreflangmetadataAPI (alternates)多语言优化,确保用户访问正确版本
Open Graph / Twitter MetametadataAPI (openGraph
/ twitter)
提高社交媒体分享效果

📌 2. 在 Next.js 中实现 SEO

2.1 内置 metadata API(元数据 API)

Next.js 13+ 引入了 metadata API,替代了 next/head,可以在 layout.tsxpage.tsx 中直接定义 SEO 相关的元数据。

示例

import type { Metadata } from 'next'export const metadata: Metadata = {title: 'Next.js SEO Optimization',description: 'Learn how to optimize Next.js applications for SEO.',keywords: ['Next.js', 'SEO', 'optimization'],robots: {index: true, // 允许搜索引擎索引follow: true, // 允许搜索引擎跟踪链接},alternates: {canonical: 'https://example.com/seo',},openGraph: {title: 'Next.js SEO',description: 'A comprehensive guide to SEO in Next.js',url: 'https://example.com/seo',images: [{url: 'https://example.com/og-image.jpg',width: 1200,height: 630,},],type: 'website',},twitter: {card: 'summary_large_image',title: 'Next.js SEO',description: 'A comprehensive guide to SEO in Next.js',images: ['https://example.com/twitter-card.jpg'],},
}

2.1.1详细字段解析

1️⃣ 标题相关

字段作用是否影响 SEO
title设置页面 <title>
标签
✅ 影响排名
title.default作为子路由的默认标题✅ 影响排名
title.template用于拼接标题(如 `%s网站名`)
title.absolute设定不受 title.template
影响的标题
✅ 影响排名

示例:

export const metadata: Metadata = {title: {template: '%s | My Website',default: 'My Website',},
}

输出

<title>My Page | My Website</title>

2️⃣页面描述

字段作用是否影响 SEO
description设置 <meta name="description">,用于搜索引擎结果页摘要✅ 影响搜索结果 CTR

示例:

export const metadata: Metadata = {description: 'Next.js SEO Best Practices',
}

输出

<meta name="description" content="Next.js SEO Best Practices" />

3️⃣关键词

字段作用是否影响 SEO
keywords设置 <meta name="keywords">,定义页面的关键词(部分搜索引擎已忽略)❌ 影响极小

示例:

export const metadata: Metadata = {keywords: ['Next.js', 'SEO', 'Optimization'],
}

输出

<meta name="keywords" content="Next.js, SEO, Optimization" />

4️⃣ 搜索引擎爬取策略

字段作用是否影响 SEO
robots控制搜索引擎的索引策略✅ 影响网页是否被收录

示例:

export const metadata: Metadata = {robots: {index: true,follow: true,noimageindex: false,googleBot: {index: true,follow: true,'max-image-preview': 'large',},},
}

输出

<meta name="robots" content="index, follow" />
<meta name="googlebot" content="index, follow, max-image-preview:large" />

5️⃣ 规范 URL(Canonical)

字段作用是否影响 SEO
alternates.canonical设置 <link rel="canonical">,避免重复内容问题✅ 影响页面权重

示例:

export const metadata: Metadata = {alternates: {canonical: 'https://example.com/seo',},
}

输出

<link rel="canonical" href="https://example.com/seo" />

6️⃣ Open Graph & Twitter 预览

字段作用是否影响 SEO
openGraph定义 Facebook、LinkedIn 等社交媒体的 Open Graph 数据✅ 增强分享体验
twitter定义 Twitter/X 分享预览✅ 增强分享体验

示例:

export const metadata: Metadata = {openGraph: {title: 'Next.js SEO',description: 'A guide to SEO in Next.js',url: 'https://example.com/seo',images: [{ url: 'https://example.com/og-image.jpg', width: 1200, height: 630 },],type: 'website',},twitter: {card: 'summary_large_image',title: 'Next.js SEO',description: 'A guide to SEO in Next.js',images: ['https://example.com/twitter-card.jpg'],},
}

输出

<meta property="og:title" content="Next.js SEO" />
<meta property="og:description" content="A guide to SEO in Next.js" />
<meta property="og:image" content="https://example.com/og-image.jpg" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="Next.js SEO" />
<meta name="twitter:image" content="https://example.com/twitter-card.jpg" />

7️⃣ 其他 SEO 相关元数据

字段作用是否影响 SEO
metadataBase设定 URL 前缀,方便定义绝对路径的 metadata✅ 影响 URL 结构
icons网站图标(favicon、Apple Touch Icon 等)✅ 影响分享体验
manifest设置 Web App Manifest 文件❌ 仅影响 PWA
appleWebApp定义 Apple Web App 相关设置❌ 仅影响 iOS 设备
appLinks定义 Android/iOS App 关联链接❌ 仅影响 App 跳转
facebook设置 Facebook App ID 或管理员 ID❌ 仅影响 Facebook
verification用于 Google、Yandex、Yahoo 站点验证❌ 仅影响站点所有权认证

2.1.2 Metadata API 最佳实践

默认在 layout.tsx 中定义 metadata,以便所有子页面继承默认值。
子页面可以覆盖 titledescription,确保每个页面唯一性。
使用 metadataBase 设定 URL 前缀,简化 canonicalog:image 配置。
**openGraphtwitter 提升社交媒体分享体验
,增加流量入口。
✅ **如果页面是动态的,使用 generateMetadata() 以根据 params 生成动态 title


2.2 生成 robots.txt 文件

在 Next.js 中,你可以 **手动添加robots.txt静态文件,或者 **动态生成robots.txt 以控制爬虫的抓取行为。Next.js 提供了一种 更智能 的方式,允许我们通过 robots.ts 文件 动态生成 规则,使 SEO 维护更加灵活。


2.2.1 使用静态 robots.txt

如果你的网站 不需要动态调整爬虫规则,可以直接在 app/ 目录下创建 robots.txt静态文件,这样 Next.js 会自动提供该文件,不需要额外的代码。

📌 创建 app/robots.txt

User-Agent: *
Allow: /
Disallow: /private/
Sitemap: https://example.com/sitemap.xml

📌 访问 https://example.com/robots.txt,你会看到:

User-Agent: *
Allow: /
Disallow: /private/
Sitemap: https://example.com/sitemap.xml

✅ 适用场景:

  • 规则固定,不会根据环境或内容变化。
  • 适用于小型网站,规则简单且不会变动。

🚨 但如果你需要动态管理爬虫规则,比如针对不同环境(开发/生产),或者对特定 URL 进行调整,就需要使用动态生成的方法。


2.2.2 通过 robots.ts 动态生成 robots.txt

Next.js 支持动态生成robots.txt,通过 app/robots.tsrobots.txt 自动适配不同环境。

📌步骤:在 app/robots.ts 中创建动态 robots.txt

import type { MetadataRoute } from 'next'export default function robots(): MetadataRoute.Robots {return {rules: [{ userAgent: '*', allow: '/' }, // 允许所有爬虫访问整个网站{ userAgent: 'Googlebot', disallow: '/private/' }, // Googlebot 不能访问 /private/],sitemap: 'https://example.com/sitemap.xml', // 指定 sitemap 位置}
}

📌 访问 https://example.com/robots.txt,你会看到:

User-Agent: *
Allow: /
User-Agent: Googlebot
Disallow: /private/
Sitemap: https://example.com/sitemap.xml

robots.ts 作用

  • 动态生成 robots.txt,自动适配不同环境。
  • 支持不同爬虫设置不同规则(如 GooglebotBingbot)。
  • 无需手动维护 robots.txt 文件,防止因修改错误导致 SEO 受损。
  • 自动缓存,提高性能。

2.2.3 robots.ts 的存放位置

  • 需要 **手动创建app/robots.ts,它不会默认存在。
  • robots.ts 必须放在 app/ 目录下的根路径**,保证 https://example.com/robots.txt 能够正确访问。
  • ⚠️ 注意:如果 robots.txtrobots.ts 同时存在,Next.js 只会使用 robots.txt(静态文件优先)。

2.2.4 robots.ts 高级用法

如果你需要 对不同搜索引擎设置不同规则,可以 传递数组 让多个爬虫遵循不同的规则。

📌 示例:针对不同搜索引擎设置不同的爬取规则

import type { MetadataRoute } from 'next'export default function robots(): MetadataRoute.Robots {return {rules: [{userAgent: 'Googlebot', // 仅针对 Googlebotallow: ['/'], // 允许访问所有页面disallow: ['/private/'], // 禁止访问 /private/},{userAgent: ['Applebot', 'Bingbot'], // 适用于 Applebot 和 Bingbotdisallow: ['/'], // 禁止访问所有页面},],sitemap: 'https://example.com/sitemap.xml',}
}

📌访问 https://example.com/robots.txt,你会看到:

User-Agent: Googlebot
Allow: /
Disallow: /private/User-Agent: Applebot
Disallow: /User-Agent: Bingbot
Disallow: /Sitemap: https://example.com/sitemap.xml

适用场景

  • 你希望 不同搜索引擎有不同的爬取规则
  • 你想 屏蔽某些爬虫(如 Applebot、Bingbot)。
  • 你希望 Googlebot 访问全部内容,但屏蔽 /private/ 目录

2.2.5 robots.ts 的完整规则

Next.js 的 robots.ts 支持以下参数:

type Robots = {rules:| {userAgent?: string | string[]allow?: string | string[]disallow?: string | string[]crawlDelay?: number}| Array<{userAgent: string | string[]allow?: string | string[]disallow?: string | string[]crawlDelay?: number}>sitemap?: string | string[]host?: string
}

📌可选参数

参数作用
userAgent指定爬虫(如 GooglebotBingbot),*代表所有爬虫
allow允许爬取的路径(如 /表示所有路径)
disallow禁止爬取的路径(如 /private/
sitemap指定站点地图的 URL
crawlDelay设置爬取延迟(秒)
host指定主机(如 https://example.com

📌示例:完整 robots.ts

export default function robots(): MetadataRoute.Robots {return {rules: [{ userAgent: '*', allow: '/' }, // 允许所有爬虫访问整个网站{ userAgent: 'Googlebot', disallow: ['/private/'], crawlDelay: 10 }, // Googlebot 禁止访问 /private/,并设置爬取间隔 10 秒],sitemap: ['https://example.com/sitemap.xml'],host: 'https://example.com',}
}

📌 访问 https://example.com/robots.txt,你会看到:

User-Agent: *
Allow: /User-Agent: Googlebot
Disallow: /private/
Crawl-Delay: 10Sitemap: https://example.com/sitemap.xml
Host: https://example.com

适用场景

  • 你希望 Googlebot 爬取速度较慢,防止服务器压力过大。
  • 你有 多个 sitemap.xml 文件,希望统一管理。
  • 你希望 为网站设置主机 URL,提高 SEO 规范性。

2.3 生成 sitemap.xml

在 SEO 优化中,sitemap.xml 站点地图能够帮助搜索引擎更快地发现并索引网站上的重要页面。Next.js 允许 **手动添加sitemap.xml 文件,或者通过 sitemap.ts自动生成 站点地图,从而大大简化维护工作。


2.3.1 使用静态 sitemap.xml

如果你的网站页面较少,并且 URL 结构比较稳定,可以 手动创建 sitemap.xml 文件,然后放置在 app/ 目录下,Next.js 会直接提供该文件。

📌 **创建 app/sitemap.xml

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://example.com</loc><lastmod>2023-01-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://example.com/blog</loc><lastmod>2023-01-01</lastmod><changefreq>daily</changefreq><priority>0.8</priority></url>
</urlset>

📌 访问 https://example.com/sitemap.xml,你会看到:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://example.com</loc><lastmod>2023-01-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://example.com/blog</loc><lastmod>2023-01-01</lastmod><changefreq>daily</changefreq><priority>0.8</priority></url>
</urlset>

适用场景

  • 小型网站,页面数量少,URL 结构不会经常变化。
  • 你希望**手动控制 sitemap.xml,无需额外代码逻辑。
  • 你不需要自动更新 lastmod(页面最后更新时间)。

🚨 但如果你的网站页面较多、结构复杂,或者经常有新页面上线,建议使用动态生成 sitemap.xml 的方式。


2.3.2 通过 sitemap.ts 动态生成 sitemap.xml

Next.js 允许 自动生成 sitemap.xml,只需创建 sitemap.ts 文件,即可根据动态路由生成站点地图。这种方法更加灵活,适用于 大型站点或频繁更新的内容

📌步骤:在 app/sitemap.ts 中创建 sitemap.xml

import type { MetadataRoute } from 'next'export default function sitemap(): MetadataRoute.Sitemap {return [{url: 'https://example.com',lastModified: new Date(),changeFrequency: 'weekly',priority: 1.0,},{url: 'https://example.com/blog',lastModified: new Date(),changeFrequency: 'daily',priority: 0.8,},]
}

📌 访问 https://example.com/sitemap.xml,你会看到:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url><loc>https://example.com</loc><lastmod>2023-01-01</lastmod><changefreq>weekly</changefreq><priority>1.0</priority></url><url><loc>https://example.com/blog</loc><lastmod>2023-01-01</lastmod><changefreq>daily</changefreq><priority>0.8</priority></url>
</urlset>

sitemap.ts 作用

  • 自动更新 lastmod,确保搜索引擎知道页面最新更新时间。
  • 支持动态 URL(如博客文章、商品页等)。
  • 搜索引擎可以更快发现新页面,加快索引速度。
  • 无需手动维护 sitemap.xml 文件,降低出错风险。

2.3.3 sitemap.ts 的存放位置

  • 需要 手动创建app/sitemap.ts,默认不会自动生成。
  • sitemap.ts必须放在 app/ 目录下,确保可以通过 https://example.com/sitemap.xml 访问到。
  • ⚠️ 注意:如果 sitemap.xmlsitemap.ts 同时存在,Next.js 只会使用 sitemap.xml(静态文件优先)。

2.3.4 生成多语言 sitemap.xml

如果你的网站有 多个语言版本,可以在 sitemap.ts添加 alternates.languages 选项,告诉搜索引擎哪些 URL 代表不同语言版本。

📌示例:支持多语言的 sitemap.ts

import type { MetadataRoute } from 'next'export default function sitemap(): MetadataRoute.Sitemap {return [{url: 'https://example.com',lastModified: new Date(),alternates: {languages: {'en': 'https://example.com/en','de': 'https://example.com/de',},},},{url: 'https://example.com/about',lastModified: new Date(),alternates: {languages: {'en': 'https://example.com/en/about','de': 'https://example.com/de/about',},},},]
}

📌 访问 https://example.com/sitemap.xml,你会看到:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml"><url><loc>https://example.com</loc><xhtml:link rel="alternate" hreflang="en" href="https://example.com/en"/><xhtml:link rel="alternate" hreflang="de" href="https://example.com/de"/><lastmod>2023-01-01</lastmod></url><url><loc>https://example.com/about</loc><xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/about"/><xhtml:link rel="alternate" hreflang="de" href="https://example.com/de/about"/><lastmod>2023-01-01</lastmod></url>
</urlset>

作用

  • 帮助搜索引擎正确索引不同语言版本的 URL
  • 避免重复内容问题canonical + hreflang)。
  • 自动维护多语言站点地图,无需手动管理

2.3.5 生成大规模网站的 sitemap.xml

如果你的网站包含 大量页面(例如电商、博客、论坛等),建议 拆分 sitemap.xml,使用 generateSitemaps 方法

📌示例:为大规模站点生成多个 sitemap.xml

import type { MetadataRoute } from 'next'
import { BASE_URL } from '@/app/lib/constants'export async function generateSitemaps() {return [{ id: 0 }, { id: 1 }, { id: 2 }]
}export default async function sitemap({ id }: { id: number }): Promise<MetadataRoute.Sitemap> {const start = id * 50000const end = start + 50000const products = await getProducts(`SELECT id, date FROM products WHERE id BETWEEN ${start} AND ${end}`)return products.map((product) => ({url: `${BASE_URL}/product/${product.id}`,lastModified: product.date,}))
}

📌 访问 /product/sitemap/1.xml,你会看到部分站点地图。适用场景

  • 站点超过 50,000 个 URL(Google 单个 sitemap.xml 限制)。
  • 电商、博客、新闻类站点 需要拆分站点地图。

📌 3. Next.js 内置 sitemap.ts vs. next-sitemap

Next.js 提供了 内置 sitemap.ts 生成 sitemap.xml 的功能,但社区中也有专门的 next-sitemap 库用于生成站点地图。那么,这两者有什么区别?应该选择哪种方式呢?本文将深入对比它们的特点、适用场景和优缺点**。


3.1 Next.js 内置 sitemap.ts

📌 Next.js 13+ 提供的 sitemap.ts 是一种原生支持**的方式,可以在 app/sitemap.ts 文件中定义站点地图,并自动生成 sitemap.xml

特点

  • 基于 app/sitemap.ts:无需额外安装依赖,Next.js 原生支持
  • 动态生成:支持 **lastModified 自动更新时间。
  • 支持多语言 (hreflang) 和多 sitemap 结构。
  • 不需要手动执行命令访问 /sitemap.xml 即可获取站点地图

优点

  • 内置支持:不需要安装 next-sitemap,减少外部依赖。
  • 自动化:无需手动运行 npx 命令,每次访问 /sitemap.xml 都是最新的
  • 支持 hreflang:适用于多语言网站。

🚨 缺点

  • 功能较基础:不支持自动解析 nextpages 目录结构,需要手动添加 URL
  • 不适用于大型网站sitemap.ts 适用于小型/中型站点,但对于有 10w+ URL 的大站,性能可能有限。

3.2 next-sitemap

📌 next-sitemapNext.js 官方推荐的 sitemap.xml 生成工具,适用于大型项目,可自动爬取 pages/ 目录,批量生成 sitemap.xml

特点

  • 支持 SSR/SSG:可自动抓取 next.config.js 中的 pages/ 目录。
  • 支持 robots.txt 生成,无需手写。
  • 支持 sitemap index(多个 sitemap.xml 文件)。
  • 提供 next-sitemap.js 配置文件,可以批量管理 URL,无需手动维护 sitemap.ts

📌 安装 next-sitemap

npm install next-sitemap

📌 配置 next-sitemap.config.js

module.exports = {siteUrl: 'https://example.com', // 站点根路径generateRobotsTxt: true, // 自动生成 robots.txtsitemapSize: 5000, // 拆分 sitemap.xmlchangefreq: 'daily', // 默认所有页面更新时间priority: 0.8, // 默认优先级exclude: ['/admin', '/private'], // 排除不想被索引的页面
}

📌 运行命令,生成 sitemap.xml

npx next-sitemap

📌 生成的 sitemap.xml

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><sitemap><loc>https://example.com/sitemap-0.xml</loc></sitemap><sitemap><loc>https://example.com/sitemap-1.xml</loc></sitemap>
</sitemapindex>

优点

  • 自动解析 pages 目录,无需手动维护 URL。
  • 支持 robots.txt,可自动生成并配置。
  • 适用于大规模网站,可以拆分多个 sitemap.xml,每个最多 50,000 个 URL。
  • 支持 next export,可用于静态站点。

🚨 缺点

  • 需要手动执行 npx next-sitemap 以生成 sitemap.xml,不像 sitemap.ts 那样是实时的。
  • 需要额外安装依赖,增加项目体积。

3.3 sitemap.ts vs. next-sitemap 对比

特性**Next.js sitemap.ts**next-sitemap
是否需要安装依赖❌ 不需要✅ 需要 (next-sitemap)
是否自动更新✅ 实时生成❌ 需要 npx运行
是否支持 robots.txt❌ 需手动写 robots.ts✅ 自动生成
是否支持 hreflang✅ 支持✅ 支持
是否适合大站点✅ 可拆分多个 sitemap✅ 更适合,自动拆分
是否支持 next export❌ 仅支持 app/目录✅ 适用于 pages/目录
是否支持 sitemap index✅ 通过 generateSitemaps✅ 自动拆分

推荐选择

  • 如果你的网站规模较小(小于 50,000 个 URL),并且在 app/ 目录下开发,建议使用 sitemap.ts
  • 如果你的网站是一个大型站点(超过 50,000 个 URL),或者使用 pages/ 目录,建议使用 next-sitemap,可以自动解析目录并生成多个 sitemap.xml
  • 如果你还需要 robots.txt 自动生成,next-sitemap 是更好的选择

📌 4. 总结

Next.js 提供了 强大的内置 SEO 工具,简化了 SEO 配置:

  • metadata API** 轻松设置 <title>metacanonical
  • robots.ts 自动生成 robots.txt,控制爬虫行为
  • sitemap.ts 生成 sitemap.xml,加快搜索引擎索引
  • 多语言 hreflang 轻松管理,提高全球搜索排名

利用 Next.js,你可以 更轻松地管理 SEO,提升网站在搜索引擎中的可见度!🚀

相关文章:

SEO炼金术(4)| Next.js SEO 全攻略

在上一篇文章 SEO炼金术&#xff08;3&#xff09;| 深入解析 SEO 关键要素 中&#xff0c;我们深入解析了 SEO 关键要素&#xff0c;包括 meta 标签、robots.txt、canonical、sitemap.xml 和 hreflang&#xff0c;并探讨了它们在搜索引擎优化&#xff08;SEO&#xff09;中的作…...

DeepSeek开源周,第五弹再次来袭,3FS

Fire-Flyer 文件系统&#xff08;3FS&#xff09;总结&#xff1a; 一、核心特点 3FS 是一个专为 AI 训练和推理工作负载设计的高性能分布式文件系统&#xff0c;利用现代 SSD 和 RDMA 网络&#xff0c;提供共享存储层&#xff0c;简化分布式应用开发。其主要特点包括&#xf…...

conda怎么迁移之前下载的环境包,把python从3.9升级到3.10

克隆旧环境&#xff08;保留旧环境作为备份&#xff09; conda create -n cloned_env --clone old_env 在克隆环境中直接升级 Python conda activate cloned_env conda install python3.10 升级 Python 后出现 所有包导入失败 的问题&#xff0c;通常是因为依赖包与新 Pyth…...

一周一个Unity小游戏2D反弹球游戏 - 移动的弹板(鼠标版)

前言 本文将实现控制弹板移动&#xff0c;通过Unity的New Input System&#xff0c;可以支持鼠标移动弹板跟随移动&#xff0c;触控点击跟随移动&#xff0c;并且当弹板移动到边界时&#xff0c;弹板不会移动超过边界之外。 创建移动相关的InputAction 项目模版创建的时候默认会…...

wordpress子分类调用父分类名称和链接的3种方法

专为导航而生&#xff0c;在wordpress模板制作过程中常常会在做breadcrumbs导航时会用到&#xff0c;子分类调用父分类的名称和链接&#xff0c;下面这段简洁的代码&#xff0c;可以完美解决这个问题。 <?php echo get_category_parents( $cat, true, &raquo; ); ?…...

使用mermaid查看cursor程序生成的流程图

一、得到cursor生成的流程图文本 cursor写的程序正常运行后&#xff0c;在对话框输入框中输入诸如“请生成扫雷的代码流程图”&#xff0c;然后cursor就把流程图给生成了&#xff0c;但是看到的还是文本的样子&#xff0c;保留这部分内容待用 二、注册一个Mermaid绘图账号 …...

GC垃圾回收介绍及GC算法详解

目录 引言 GC的作用域 什么是垃圾回收&#xff1f; 常见的GC算法 1.引用计数法 2.复制算法 3.标记清除 4.标记整理 小总结 5.分代收集算法 ps:可达性分析算法&#xff1f; 可达性分析的作用 可达性分析与垃圾回收算法的关系 结论 引言 在编程世界中&#xff0c;…...

设计后端返回给前端的返回体

目录 1、为什么要设计返回体&#xff1f; 2、返回体包含哪些内容&#xff08;如何设计&#xff09;&#xff1f; 举例 3、总结 1、为什么要设计返回体&#xff1f; 在设计后端返回给前端的返回体时&#xff0c;通常需要遵循一定的规范&#xff0c;以确保前后端交互的清晰性…...

Pytorch为什么 nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss?

为什么 nn.CrossEntropyLoss LogSoftmax nn.NLLLoss&#xff1f; 在使用 PyTorch 时&#xff0c;我们经常听说 nn.CrossEntropyLoss 是 LogSoftmax 和 nn.NLLLoss 的组合。这句话听起来简单&#xff0c;但背后到底是怎么回事&#xff1f;为什么这两个分开的功能加起来就等于…...

Linux实操——在服务器上直接从百度网盘下载(/上传)文件

Linux Linux实操——在服务器上直接从百度网盘下载&#xff08;/上传&#xff09;文件 文章目录 Linux前言一、下载并安装bypy工具二、认证并授权网盘账号三、将所需文件转移至目的文件夹下四、下载文件五、上传文件六、更换绑定的百度云盘账户 前言 最近收到一批很大的数据&…...

【无标题】ABP更换MySql数据库

原因&#xff1a;ABP默认使用的数据库是sqlServer&#xff0c;本地没有安装sqlServer&#xff0c;安装的是mysql&#xff0c;需要更换数据库 ABP版本&#xff1a;9.0 此处以官网TodoApp项目为例 打开EntityFrameworkCore程序集&#xff0c;可以看到默认使用的是sqlServer&…...

nuxt常用组件库html-validator应用解析

html-validator 主要用于自动验证nuxt服务器呈现的HTML(SSR和SSG)&#xff0c;以检测可能导致水合错误的HTML常见问题&#xff0c;有助于减少水合错误&#xff0c;检测常见的可访问性错误。 安装 npx nuxilatest module add html-validator配置 若自动更新nuxt.config.ts配置文…...

思维训练(算法+技巧)

1.深度优先搜索&#xff1a;暴力求解&#xff0c;适合判断能不能走出迷宫 利用递归&#xff0c;有一个check【】数组来检查该节点是否经过 for循环该节点的邻接节点&#xff08;存在且没被访问&#xff09;&#xff0c;递归DFS&#xff08;该节点的某个邻接节点&#xff09; D…...

AIGC(生成式AI)试用 25 -- 跟着清华教程学习 - DeepSeek+DeepResearch让科研像聊天一样简单

目标&#xff1a;继续学习&#xff0c;以DeepSeek为主 个人理解&#xff1a; - 模型结合&#xff0c;充分发挥各模型的优势 - 关注应用&#xff0c;弱化理论&#xff0c;了解就好 - 多模态&#xff1a;多模态&#xff08;Multimodality&#xff09;是指结合多种不同类型的数据…...

Solr中得Core和Collection的作用和关系

Solr中得Core和Collection的作用和关系 一&#xff0c; 总结 在Apache Solr中&#xff0c;Core和Collection 是两个核心概念&#xff0c;他们分别用于单机模式和分布式模式&#xff08;SolrCloud&#xff09;中&#xff0c;用于管理和组织数据。 二&#xff0c;Core 定义&am…...

温湿度监控设备融入智慧物联网

当医院的温湿度监控设备融入智慧物联网&#xff0c;将会带来许多新的体验&#xff0c;可以帮助医院温湿度监控设备智能化管理&#xff0c;实现设备之间的互联互通&#xff0c;方便医院对温湿度数据进行统一管理和分析。 添加智慧物联网技术&#xff0c;实现对医院温湿度的实时…...

软件测试的七大误区

随着软件测试对提高软件质量重要性的不断提高&#xff0c;软件测试也不断受到重视。但是&#xff0c;国内软件测试过程的不规范&#xff0c;重视开发和轻视测试的现象依旧存在。因此&#xff0c;对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…...

Mac 版 本地部署deepseek ➕ RAGflow 知识库搭建流程分享(附问题解决方法)

安装&#xff1a; 1、首先按照此视频的流程一步一步进行安装&#xff1a;(macos版&#xff09;ragflowdeepseek 私域知识库搭建流程分享_哔哩哔哩_bilibili 2、RAGflow 官网文档指南&#xff1a;https://ragflow.io 3、RAGflow 下载地址&#xff1a;https://github.com/infi…...

标记符号“<”和“>”符号被称为“尖括号”或“角括号”

你提到的“<”和“>”符号被称为“尖括号”或“角括号”。它们常用于编程语言中表示类型参数&#xff08;如泛型&#xff09;、HTML标签&#xff08;如<div>&#xff09;、数学中的不等式&#xff08;如< 5&#xff09;等。 好的&#xff0c;我来用通俗的方式解…...

DMA发送全部历史记录数据到串口

背景 博主参与的项目中&#xff0c;有个读取全部历史记录的功能&#xff0c;如果下位机在主程序中将全部历史记录单纯地通过串口传输会比较占用cpu资源&#xff0c;影响主程序中别的功能。最后商量得出以下实现方案&#xff1a; 定义两个发送缓冲区DMATxbuf1和DMATxbuf2&…...

js基础案例

1.弹出警告框&#xff0c;显示Hello JS 2.在页面输出内容&#xff08;内容在body标签里面&#xff09; 3.在控制台输出内容 4.js代码是自上而下执行 5.将js代码编写到标签的onclick属性中&#xff0c;当点击时&#xff0c;js代码才会执行 6.将js写到超链接的href属性中&#xf…...

机器学习之集成学习思维导图

学习笔记—机器学习-集成学习思维导图 20250227&#xff0c;以后复习看&#xff08;周老师的集成学习&#xff09; PS&#xff1a;图片看不清&#xff0c;可以下载下来看。 往期思维导图&#xff1a; 机器学习之集成学习Bagging&#xff08;随机深林、VR-树、极端随机树&…...

学生考勤请假管理系统

在当今信息化时代&#xff0c;传统的纸质考勤和请假管理方式已难以满足高校日益增长的管理需求。手工记录效率低下、容易出错&#xff0c;且难以进行数据统计和分析&#xff0c;无法为教学管理提供有效的决策支持。因此&#xff0c;开发一套高效、便捷、安全的学生考勤请假管理…...

算法之领域算法

领域算法 ♥一些领域算法知识体系♥ | Java 全栈知识体系...

服务 ‘Sql Server VSS writer‘ (SQLWriter) 在安装 LocalDB 时无法启动

安装Microsoft Visual C 2015-2019 Redistributable (x64)...

GDidees CMS v3.9.1本地文件泄露漏洞(CVE-2023-27179)

漏洞简介&#xff1a; GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞&#xff0c;漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。 漏洞环境&#xff1a; 春秋云镜中的漏洞靶标&#xff0c;CVE编号为CVE-2023-27179 漏洞复现: 进入靶场发现没…...

PyQT(PySide)的上下文菜单策略设置setContextMenuPolicy()

在 Qt 中&#xff0c;QWidget 类提供了几种不同的上下文菜单策略&#xff0c;这些策略通过 Qt::ContextMenuPolicy 枚举类型来定义&#xff0c;用于控制控件&#xff08;如按钮、文本框等&#xff09;在用户右键点击时如何显示上下文菜单。 以下是 Qt::ContextMenuPolicy 枚举中…...

【AI深度学习基础】NumPy完全指南进阶篇:核心功能与工程实践(含完整代码)

NumPy系列文章 入门篇进阶篇终极篇 一、引言 在掌握NumPy基础操作后&#xff0c;开发者常面临真实工程场景中的三大挑战&#xff1a;如何优雅地处理高维数据交互&#xff1f;如何在大规模计算中实现内存与性能的平衡&#xff1f;怎样与深度学习框架实现高效协同&#xff1f;…...

爬虫获取微店商品快递费 item_feeAPI 接口的完整指南

在电商运营中&#xff0c;快递费用的计算是影响用户体验和商家成本的重要因素。通过获取快递费数据&#xff0c;商家可以优化定价策略、提升用户体验&#xff0c;甚至实现个性化的营销方案。本文将详细介绍如何通过爬虫技术调用微店的快递费 API 接口&#xff0c;获取商品的快递…...

etcd 3.15 三节点集群管理指南

本文档旨在提供 etcd 3.15 版本的三节点集群管理指南&#xff0c;涵盖节点的新增、删除、状态检查、数据库备份和恢复等操作。 1. 环境准备 1.1 系统要求 操作系统&#xff1a;Linux&#xff08;推荐 Ubuntu 18.04 或 CentOS 7&#xff09; 内存&#xff1a;至少 2GB 磁盘&a…...

Python 数据可视化(一)熟悉Matplotlib

目录 一、安装包 二、先画个折线图 1、修改标签文字和线条粗细 2、内置样式 3、scatter() 绘制散点图 4、scatter() 绘制多个点 5、设置样式 6、保存绘图 数据可视化指的是通过可视化表示来探索和呈现数据集内的规律。 一、安装包 win R 打开终端 安装 Matplotlib&…...

使用自动化运维工具 Ansible 集中化管理服务器

一、概述 Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具 官方网站:https://www.ansible.com/ Ansible 成立于 2013 年,总部设在北卡罗来纳州达勒姆,联合创始人 ad Ziouani 和高级副总裁 Todd Barr都是红帽的老员工。Ansible 旗下的开源软件 Ansible 十分…...

STL 算法库中的 min_element 和 max_element

在 C STL中&#xff0c;min_element 和 max_element 是两个非常实用的算法函数&#xff0c;用于快速找到容器或范围内的最小值和最大值&#xff0c;这里以min为例。 头文件&#xff1a;<algorithm> 语法&#xff1a; template <class ForwardIterator> ForwardIt…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-ops.py

ops.py ultralytics\models\utils\ops.py 目录 ops.py 1.所需的库和模块 2.class HungarianMatcher(nn.Module): 3.def get_cdn_group(batch, num_classes, num_queries, class_embed, num_dn100, cls_noise_ratio0.5, box_noise_scale1.0, trainingFalse): 1.所需的库…...

翻译: 深入分析LLMs like ChatGPT 一

大家好&#xff0c;我想做这个视频已经有一段时间了。这是一个全面但面向普通观众的介绍&#xff0c;介绍像ChatGPT这样的大型语言模型。我希望通过这个视频让大家对这种工具的工作原理有一些概念性的理解。 首先&#xff0c;我们来谈谈你在这个文本框里输入内容并点击回车后背…...

【1162. 地图分析 中等】

题目&#xff1a; 你现在手里有一份大小为 n x n 的 网格 grid&#xff0c;上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋&#xff0c;1 代表陆地。 请你找出一个海洋单元格&#xff0c;这个海洋单元格到离它最近的陆地单元格的距离是最大的&#xff0c;并返回该…...

PyQT6是干啥的?

PyQt6 是一个用于创建图形用户界面&#xff08;GUI&#xff09;的 Python 库&#xff0c;基于 Qt 框架。它允许开发者用 Python 编写跨平台的桌面应用程序&#xff0c;支持 Windows、macOS 和 Linux 等操作系统。 主要功能 GUI 开发&#xff1a;提供丰富的控件&#xff08;如按…...

华为云之使用鲲鹏弹性云服务器部署Node.js环境【玩转华为云】

华为云之使用鲲鹏弹性云服务器部署Node.js环境【玩转华为云】 一、本次实践介绍1.1 实践环境简介1.3 本次实践完成目标 二、 相关服务介绍2.1 华为云ECS云服务器介绍2.2 Node.js介绍 三、环境准备工作3.1 预置实验环境3.2 查看预置环境信息 四、登录华为云4.1 登录华为云4.2 查…...

PyCharm怎么集成DeepSeek

PyCharm怎么集成DeepSeek 在PyCharm中集成DeepSeek等大语言模型(LLM)可以借助一些插件或通过代码调用API的方式实现,以下为你详细介绍两种方法: 方法一:使用JetBrains AI插件(若支持DeepSeek) JetBrains推出了AI插件来集成大语言模型,不过截至2024年7月,官方插件主要…...

NFC拉起微信小程序申请URL scheme 汇总

NFC拉起微信小程序&#xff0c;需要在微信小程序开发里边申请 URL scheme &#xff0c;审核通过后才可以使用NFC标签碰一碰拉起微信小程序 有不少人被难住了&#xff0c;从微信小程序开发社区汇总了以下信息&#xff0c;供大家参考 第一&#xff0c;NFC标签打开小程序 https://…...

使用Docker方式一键部署MySQL和Redis数据库详解

一、前言 数据库是现代应用开发中不可或缺的一部分&#xff0c;MySQL和Redis作为两种广泛使用的数据库系统&#xff0c;分别用于关系型数据库和键值存储。本文旨在通过Docker和Docker Compose的方式&#xff0c;提供一个简洁明了的一键部署方案&#xff0c;确保数据库服务的稳…...

spring注解开发(Spring整合MyBatis——Mapper代理开发模式、(Spring、MyBatis、Jdbc)配置类)(6)

目录 一、纯MyBatis独立开发程序。 &#xff08;1&#xff09;数据库与数据表。 &#xff08;2&#xff09;实体类。 &#xff08;3&#xff09;dao层接口。&#xff08;Mapper代理模式、无SQL映射文件——注解配置映射关系&#xff09; &#xff08;4&#xff09;MyBatis核心配…...

Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程

Redisson 是一个高性能的 Java Redis 客户端&#xff0c;提供了丰富的分布式工具集&#xff0c;如分布式锁、Map、Queue 等&#xff0c;帮助开发者简化 Redis 的操作。在集成 Redisson 到项目时&#xff0c;开发者通常有两种选择&#xff1a; 使用 Redisson 原始依赖。使用 Re…...

Maven中一些基础知识点

早些时候只知道创建或者开发springboot项目时候&#xff0c;有一个叫pom.xml的文件可以用来管理项目所需的依赖/第三方工具。 索性稍微深入了解了一下&#xff0c;然后把自己认为重要的记录下来。 首先我们要引入新的依赖自然是在dependencies下写dependency&#xff0c;这个…...

塑造网络安全的关键事件

注&#xff1a;本文为 “网络安全” 相关文章合辑。 机翻&#xff0c;未校。 Timeline of Cyber Security: Key Events that Shaped the Field 网络安全时间表&#xff1a;塑造该领域的关键事件 October 29, 2023 Cyberattacks are an everyday threat, always changing. T…...

前端项目打包生成 JS 文件的核心步骤

前端项目打包生成 JS 文件的过程通常涉及以下核心步骤&#xff0c;以主流工具&#xff08;如 Webpack、Vite、Rollup 等&#xff09;为例&#xff1a; 一、项目准备阶段 项目结构 源代码目录&#xff08;如 src/&#xff09;包含 JS/TS、CSS、图片等资源配置文件&#xff08;pa…...

【Pandas】pandas Series fillna

Pandas2.2 Series Computations descriptive stats 方法描述Series.backfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值&#xff08;NaN&#xff09;的方法Series.bfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值&#xff08;NaN&#xff09;的…...

微信小程序自定义导航栏实现指南

文章目录 微信小程序自定义导航栏实现指南一、自定义导航栏的需求分析二、代码实现1. WXML 结构2. WXSS 样式样式解析:3. JavaScript 逻辑三、完整代码示例四、注意事项与优化建议五、总结微信小程序自定义导航栏实现指南 在微信小程序开发中,默认的导航栏样式可能无法满足所…...

GitCode 助力 python-office:开启 Python 自动化办公新生态

项目仓库&#xff1a;https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察&#xff0c;打造 Python 办公神器 项目作者程序员晚枫在运营拥有 14w 粉丝的 B 站账号 “Python 自动化办公社区” 时&#xff0c;敏锐察觉到非程序员群体对 Python 学习的强烈需求。在数字…...

C#开发的Base64编码及解码完整源码及注意事项

在软件开发时&#xff0c;经常用Base64编码和解码功能。本文介绍一个简单易用的Base64 编码和解码工具&#xff0c;顾名思义&#xff0c;就是简单快捷地进行 Base64 代码的解码或编码操作。您的数据可以轻松地编码为 Base64 编码&#xff0c;也可以解码为可读的格式。传输数据时…...