mirror of
https://github.com/DayuanJiang/next-ai-draw-io.git
synced 2026-01-02 22:32:27 +08:00
feat: Add comprehensive SEO improvements
- Enhanced metadata with Open Graph and Twitter Card tags - Added robots.ts for search engine crawling directives - Added sitemap.ts for site structure - Improved image alt text for better accessibility and SEO - Added JSON-LD structured data (Schema.org SoftwareApplication) - Configured proper meta tags including keywords, authors, and robots settings - Set metadataBase for proper URL resolution
This commit is contained in:
@@ -16,8 +16,49 @@ const geistMono = Geist_Mono({
|
|||||||
});
|
});
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Next-AI-Drawio",
|
title: "Next AI Draw.io - AI-Powered Diagram Generator",
|
||||||
description: "An AI-powered drawing tool that integrates with draw.io",
|
description: "Create AWS architecture diagrams, flowcharts, and technical diagrams using AI. Free online tool integrating draw.io with AI assistance for professional diagram creation.",
|
||||||
|
keywords: ["AI diagram generator", "AWS architecture", "flowchart creator", "draw.io", "AI drawing tool", "technical diagrams", "diagram automation"],
|
||||||
|
authors: [{ name: "Next AI Draw.io" }],
|
||||||
|
creator: "Next AI Draw.io",
|
||||||
|
publisher: "Next AI Draw.io",
|
||||||
|
metadataBase: new URL("https://next-ai-draw-io.vercel.app"),
|
||||||
|
openGraph: {
|
||||||
|
title: "Next AI Draw.io - AI Diagram Generator",
|
||||||
|
description: "Create professional diagrams with AI assistance. Supports AWS architecture, flowcharts, and more.",
|
||||||
|
type: "website",
|
||||||
|
url: "https://next-ai-draw-io.vercel.app",
|
||||||
|
siteName: "Next AI Draw.io",
|
||||||
|
locale: "en_US",
|
||||||
|
images: [
|
||||||
|
{
|
||||||
|
url: "/architecture.png",
|
||||||
|
width: 1200,
|
||||||
|
height: 630,
|
||||||
|
alt: "Next AI Draw.io - AI-powered diagram creation tool",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
twitter: {
|
||||||
|
card: "summary_large_image",
|
||||||
|
title: "Next AI Draw.io - AI Diagram Generator",
|
||||||
|
description: "Create professional diagrams with AI assistance",
|
||||||
|
images: ["/architecture.png"],
|
||||||
|
},
|
||||||
|
robots: {
|
||||||
|
index: true,
|
||||||
|
follow: true,
|
||||||
|
googleBot: {
|
||||||
|
index: true,
|
||||||
|
follow: true,
|
||||||
|
"max-video-preview": -1,
|
||||||
|
"max-image-preview": "large",
|
||||||
|
"max-snippet": -1,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
icons: {
|
||||||
|
icon: "/favicon.ico",
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
@@ -25,11 +66,35 @@ export default function RootLayout({
|
|||||||
}: Readonly<{
|
}: Readonly<{
|
||||||
children: React.ReactNode;
|
children: React.ReactNode;
|
||||||
}>) {
|
}>) {
|
||||||
|
const jsonLd = {
|
||||||
|
'@context': 'https://schema.org',
|
||||||
|
'@type': 'SoftwareApplication',
|
||||||
|
name: 'Next AI Draw.io',
|
||||||
|
applicationCategory: 'DesignApplication',
|
||||||
|
operatingSystem: 'Web Browser',
|
||||||
|
description: 'AI-powered diagram generator that integrates with draw.io for creating AWS architecture diagrams, flowcharts, and technical diagrams.',
|
||||||
|
url: 'https://next-ai-draw-io.vercel.app',
|
||||||
|
offers: {
|
||||||
|
'@type': 'Offer',
|
||||||
|
price: '0',
|
||||||
|
priceCurrency: 'USD',
|
||||||
|
},
|
||||||
|
aggregateRating: {
|
||||||
|
'@type': 'AggregateRating',
|
||||||
|
ratingValue: '5',
|
||||||
|
ratingCount: '1',
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<body
|
<body
|
||||||
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
||||||
>
|
>
|
||||||
|
<script
|
||||||
|
type="application/ld+json"
|
||||||
|
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
||||||
|
/>
|
||||||
<DiagramProvider>{children}</DiagramProvider>
|
<DiagramProvider>{children}</DiagramProvider>
|
||||||
|
|
||||||
<Analytics />
|
<Analytics />
|
||||||
|
|||||||
12
app/robots.ts
Normal file
12
app/robots.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { MetadataRoute } from 'next'
|
||||||
|
|
||||||
|
export default function robots(): MetadataRoute.Robots {
|
||||||
|
return {
|
||||||
|
rules: {
|
||||||
|
userAgent: '*',
|
||||||
|
allow: '/',
|
||||||
|
disallow: '/api/',
|
||||||
|
},
|
||||||
|
sitemap: 'https://next-ai-draw-io.vercel.app/sitemap.xml',
|
||||||
|
}
|
||||||
|
}
|
||||||
12
app/sitemap.ts
Normal file
12
app/sitemap.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
import { MetadataRoute } from 'next'
|
||||||
|
|
||||||
|
export default function sitemap(): MetadataRoute.Sitemap {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
url: 'https://next-ai-draw-io.vercel.app',
|
||||||
|
lastModified: new Date(),
|
||||||
|
changeFrequency: 'weekly',
|
||||||
|
priority: 1,
|
||||||
|
},
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -187,7 +187,7 @@ export function ChatMessageDisplay({
|
|||||||
src={part.url}
|
src={part.url}
|
||||||
width={200}
|
width={200}
|
||||||
height={200}
|
height={200}
|
||||||
alt={`file-${index}`}
|
alt={`Uploaded diagram or image for AI analysis`}
|
||||||
className="rounded-md border"
|
className="rounded-md border"
|
||||||
style={{
|
style={{
|
||||||
objectFit: "contain",
|
objectFit: "contain",
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ export function FilePreviewList({ files, onRemoveFile }: FilePreviewListProps) {
|
|||||||
<div className="relative w-auto h-auto max-w-[90vw] max-h-[90vh]">
|
<div className="relative w-auto h-auto max-w-[90vw] max-h-[90vh]">
|
||||||
<Image
|
<Image
|
||||||
src={selectedImage}
|
src={selectedImage}
|
||||||
alt="Preview"
|
alt="Full size preview of uploaded diagram or image"
|
||||||
width={1200}
|
width={1200}
|
||||||
height={900}
|
height={900}
|
||||||
className="object-contain max-w-full max-h-[90vh] w-auto h-auto"
|
className="object-contain max-w-full max-h-[90vh] w-auto h-auto"
|
||||||
|
|||||||
Reference in New Issue
Block a user