feat: 全面优化系统 - 修复task1语法错误 + Bot超时保护 + 熔断重试 + Redis缓存 + SEO + 日志清理 + 内容质量评估
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
import { MetadataRoute } from "next";
|
||||
|
||||
export default function robots(): MetadataRoute.Robots {
|
||||
return {
|
||||
rules: [
|
||||
{
|
||||
userAgent: "*",
|
||||
allow: ["/", "/daily", "/skills", "/reviews", "/community"],
|
||||
disallow: ["/admin", "/api/", "/login", "/_next/"],
|
||||
},
|
||||
{
|
||||
userAgent: "Googlebot",
|
||||
allow: "/",
|
||||
},
|
||||
{
|
||||
userAgent: "Baiduspider",
|
||||
allow: "/",
|
||||
},
|
||||
],
|
||||
sitemap: "https://www.zhuig.com/sitemap.xml",
|
||||
host: "https://www.zhuig.com",
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
import { MetadataRoute } from "next";
|
||||
|
||||
export default async function sitemap(): Promise<MetadataRoute.Sitemap> {
|
||||
const baseUrl = "https://www.zhuig.com";
|
||||
|
||||
// 静态页面
|
||||
const staticPages: MetadataRoute.Sitemap = [
|
||||
{ url: baseUrl, lastModified: new Date(), changeFrequency: "daily", priority: 1 },
|
||||
{ url: `${baseUrl}/daily`, lastModified: new Date(), changeFrequency: "daily", priority: 0.9 },
|
||||
{ url: `${baseUrl}/skills`, lastModified: new Date(), changeFrequency: "daily", priority: 0.8 },
|
||||
{ url: `${baseUrl}/reviews`, lastModified: new Date(), changeFrequency: "daily", priority: 0.8 },
|
||||
{ url: `${baseUrl}/community`, lastModified: new Date(), changeFrequency: "daily", priority: 0.9 },
|
||||
{ url: `${baseUrl}/community/bots`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.7 },
|
||||
{ url: `${baseUrl}/community/bots/leaderboard`, lastModified: new Date(), changeFrequency: "daily", priority: 0.7 },
|
||||
{ url: `${baseUrl}/community/search`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.5 },
|
||||
{ url: `${baseUrl}/community/tags`, lastModified: new Date(), changeFrequency: "weekly", priority: 0.6 },
|
||||
{ url: `${baseUrl}/community/checkin`, lastModified: new Date(), changeFrequency: "daily", priority: 0.6 },
|
||||
{ url: `${baseUrl}/login`, lastModified: new Date(), changeFrequency: "monthly", priority: 0.3 },
|
||||
];
|
||||
|
||||
// 动态页面:论坛分类
|
||||
try {
|
||||
const { PrismaClient } = await import("@prisma/client");
|
||||
const { PrismaMariaDb } = await import("@prisma/adapter-mariadb");
|
||||
|
||||
const databaseUrl = process.env.DATABASE_URL;
|
||||
if (databaseUrl) {
|
||||
const base = databaseUrl.replace("mysql://", "mariadb://");
|
||||
const sep = base.includes("?") ? "&" : "?";
|
||||
const connectionString = `${base}${sep}connection_limit=5&pool_timeout=30`;
|
||||
const adapter = new PrismaMariaDb(connectionString);
|
||||
const prisma = new PrismaClient({ adapter });
|
||||
|
||||
// 论坛分类
|
||||
const categories = await prisma.forumCategory.findMany({
|
||||
select: { slug: true, updatedAt: true },
|
||||
});
|
||||
const categoryPages: MetadataRoute.Sitemap = categories.map((cat) => ({
|
||||
url: `${baseUrl}/community/${cat.slug}`,
|
||||
lastModified: cat.updatedAt,
|
||||
changeFrequency: "daily" as const,
|
||||
priority: 0.7,
|
||||
}));
|
||||
|
||||
// 最近的话题
|
||||
const topics = await prisma.forumTopic.findMany({
|
||||
where: { isHidden: false },
|
||||
select: { id: true, slug: true, updatedAt: true, category: { select: { slug: true } } },
|
||||
orderBy: { updatedAt: "desc" },
|
||||
take: 500,
|
||||
});
|
||||
const topicPages: MetadataRoute.Sitemap = topics.map((topic) => ({
|
||||
url: `${baseUrl}/community/${topic.category.slug}/${topic.slug}`,
|
||||
lastModified: topic.updatedAt,
|
||||
changeFrequency: "weekly" as const,
|
||||
priority: 0.6,
|
||||
}));
|
||||
|
||||
await prisma.$disconnect();
|
||||
return [...staticPages, ...categoryPages, ...topicPages];
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Sitemap generation error:", e);
|
||||
}
|
||||
|
||||
return staticPages;
|
||||
}
|
||||
Reference in New Issue
Block a user