- Added new Markdown Editor with live preview, GFM support, PDF/HTML/DOCX export - Upgraded all paste fields to CodeMirror with syntax highlighting and expand/collapse - Enhanced Object Editor with advanced URL fetching and preview mode - Improved export views with syntax highlighting in Table/Object editors - Implemented SEO improvements (FAQ schema, breadcrumbs, internal linking) - Added Related Tools recommendations component - Created custom 404 page with tool suggestions - Consolidated tools: removed JSON, Serialize, CSV-JSON (merged into main editors) - Updated documentation and cleaned up redundant files - Updated release notes with user-centric improvements
131 lines
4.1 KiB
JavaScript
131 lines
4.1 KiB
JavaScript
import React from 'react';
|
|
import { Helmet } from 'react-helmet-async';
|
|
import TOOL_FAQS from '../data/faqs';
|
|
|
|
const SEO = ({
|
|
title,
|
|
description,
|
|
keywords,
|
|
path = '/',
|
|
type = 'website',
|
|
image = 'https://dewe.dev/og-image.png',
|
|
toolId = null
|
|
}) => {
|
|
const siteUrl = 'https://dewe.dev';
|
|
const fullUrl = `${siteUrl}${path}`;
|
|
const fullTitle = title ? `${title} | Developer Tools` : 'Developer Tools - Essential Web Developer Utilities';
|
|
const defaultDescription = 'Free online developer tools for JSON, CSV, Base64, URL encoding, code beautification, and more. Privacy-first, no data storage, all processing in your browser.';
|
|
const metaDescription = description || defaultDescription;
|
|
const defaultKeywords = 'developer tools, json editor, csv converter, base64 encoder, url encoder, code beautifier, diff tool, web developer utilities, online tools';
|
|
const metaKeywords = keywords || defaultKeywords;
|
|
|
|
// Get FAQ data for this tool
|
|
const faqs = toolId && TOOL_FAQS[toolId] ? TOOL_FAQS[toolId] : null;
|
|
|
|
// Generate breadcrumb schema
|
|
const breadcrumbSchema = {
|
|
"@context": "https://schema.org",
|
|
"@type": "BreadcrumbList",
|
|
"itemListElement": [
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 1,
|
|
"name": "Home",
|
|
"item": siteUrl
|
|
}
|
|
]
|
|
};
|
|
|
|
// Add current page to breadcrumb if not homepage
|
|
if (path !== '/') {
|
|
breadcrumbSchema.itemListElement.push({
|
|
"@type": "ListItem",
|
|
"position": 2,
|
|
"name": title || "Page",
|
|
"item": fullUrl
|
|
});
|
|
}
|
|
|
|
// Generate FAQ schema if FAQs exist
|
|
const faqSchema = faqs ? {
|
|
"@context": "https://schema.org",
|
|
"@type": "FAQPage",
|
|
"mainEntity": faqs.map(faq => ({
|
|
"@type": "Question",
|
|
"name": faq.question,
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": faq.answer
|
|
}
|
|
}))
|
|
} : null;
|
|
|
|
return (
|
|
<Helmet>
|
|
{/* Basic Meta Tags */}
|
|
<title>{fullTitle}</title>
|
|
<meta name="description" content={metaDescription} />
|
|
<meta name="keywords" content={metaKeywords} />
|
|
<link rel="canonical" href={fullUrl} />
|
|
|
|
{/* Open Graph / Facebook */}
|
|
<meta property="og:type" content={type} />
|
|
<meta property="og:url" content={fullUrl} />
|
|
<meta property="og:title" content={fullTitle} />
|
|
<meta property="og:description" content={metaDescription} />
|
|
<meta property="og:image" content={image} />
|
|
<meta property="og:site_name" content="Developer Tools" />
|
|
|
|
{/* Twitter Card */}
|
|
<meta name="twitter:card" content="summary_large_image" />
|
|
<meta name="twitter:url" content={fullUrl} />
|
|
<meta name="twitter:title" content={fullTitle} />
|
|
<meta name="twitter:description" content={metaDescription} />
|
|
<meta name="twitter:image" content={image} />
|
|
|
|
{/* Additional SEO Tags */}
|
|
<meta name="robots" content="index, follow" />
|
|
<meta name="googlebot" content="index, follow" />
|
|
<meta name="author" content="Developer Tools" />
|
|
<meta name="language" content="English" />
|
|
|
|
{/* JSON-LD Structured Data - WebApplication */}
|
|
<script type="application/ld+json">
|
|
{JSON.stringify({
|
|
"@context": "https://schema.org",
|
|
"@type": "WebApplication",
|
|
"name": fullTitle,
|
|
"description": metaDescription,
|
|
"url": fullUrl,
|
|
"applicationCategory": "DeveloperApplication",
|
|
"operatingSystem": "Any",
|
|
"offers": {
|
|
"@type": "Offer",
|
|
"price": "0",
|
|
"priceCurrency": "USD"
|
|
},
|
|
"provider": {
|
|
"@type": "Organization",
|
|
"name": "Developer Tools",
|
|
"url": siteUrl
|
|
}
|
|
})}
|
|
</script>
|
|
|
|
{/* JSON-LD Structured Data - Breadcrumb */}
|
|
<script type="application/ld+json">
|
|
{JSON.stringify(breadcrumbSchema)}
|
|
</script>
|
|
|
|
{/* JSON-LD Structured Data - FAQ (if available) */}
|
|
{faqSchema && (
|
|
<script type="application/ld+json">
|
|
{JSON.stringify(faqSchema)}
|
|
</script>
|
|
)}
|
|
</Helmet>
|
|
);
|
|
};
|
|
|
|
export default SEO;
|