Critical SEO improvements to fix Google Search Console indexing: ## Sitemap Updates: - Added missing Invoice Editor and What's New pages - Updated all lastmod dates to 2025-10-15 - Increased editor tools priority to 0.9 - Added organizational comments - Fixed /whats-new route (was /release-notes) ## Pre-rendering Implementation: - Added react-snap for static HTML generation - Configured to pre-render all tool pages - Solves React SPA indexing issue - Crawlers now see full HTML content ## Dynamic Meta Tags: - Added react-helmet-async for SEO management - Created reusable SEO component with: - Dynamic titles and descriptions - Open Graph tags (Facebook) - Twitter Card tags - JSON-LD structured data - Canonical URLs - Wrapped App with HelmetProvider - Added SEO to Home page ## Route Fixes: - Added /whats-new route (primary) - Kept /release-notes as fallback - Consistent routing across app ## Documentation: - Created comprehensive SEO_FIX_GUIDE.md - Step-by-step Google Search Console instructions - Troubleshooting guide - Timeline expectations - Testing procedures These changes will dramatically improve Google indexing and search visibility.
66 lines
2.7 KiB
JavaScript
66 lines
2.7 KiB
JavaScript
import React, { useEffect } from 'react';
|
|
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
|
|
import { HelmetProvider } from 'react-helmet-async';
|
|
import Layout from './components/Layout';
|
|
import ErrorBoundary from './components/ErrorBoundary';
|
|
import Home from './pages/Home';
|
|
import JsonTool from './pages/JsonTool';
|
|
import SerializeTool from './pages/SerializeTool';
|
|
import UrlTool from './pages/UrlTool';
|
|
import Base64Tool from './pages/Base64Tool';
|
|
import CsvJsonTool from './pages/CsvJsonTool';
|
|
import BeautifierTool from './pages/BeautifierTool';
|
|
import DiffTool from './pages/DiffTool';
|
|
import TextLengthTool from './pages/TextLengthTool';
|
|
import ObjectEditor from './pages/ObjectEditor';
|
|
import TableEditor from './pages/TableEditor';
|
|
import InvoiceEditor from './pages/InvoiceEditor';
|
|
import InvoicePreview from './pages/InvoicePreview';
|
|
import InvoicePreviewMinimal from './pages/InvoicePreviewMinimal';
|
|
import ReleaseNotes from './pages/ReleaseNotes';
|
|
import TermsOfService from './pages/TermsOfService';
|
|
import PrivacyPolicy from './pages/PrivacyPolicy';
|
|
import { initGA } from './utils/analytics';
|
|
|
|
import './index.css';
|
|
|
|
function App() {
|
|
// Initialize Google Analytics on app startup
|
|
useEffect(() => {
|
|
initGA();
|
|
}, []);
|
|
|
|
return (
|
|
<HelmetProvider>
|
|
<ErrorBoundary>
|
|
<Router>
|
|
<Layout>
|
|
<Routes>
|
|
<Route path="/" element={<Home />} />
|
|
<Route path="/json" element={<JsonTool />} />
|
|
<Route path="/serialize" element={<SerializeTool />} />
|
|
<Route path="/url" element={<UrlTool />} />
|
|
<Route path="/base64" element={<Base64Tool />} />
|
|
<Route path="/csv-json" element={<CsvJsonTool />} />
|
|
<Route path="/beautifier" element={<BeautifierTool />} />
|
|
<Route path="/diff" element={<DiffTool />} />
|
|
<Route path="/text-length" element={<TextLengthTool />} />
|
|
<Route path="/object-editor" element={<ObjectEditor />} />
|
|
<Route path="/table-editor" element={<TableEditor />} />
|
|
<Route path="/invoice-editor" element={<InvoiceEditor />} />
|
|
<Route path="/invoice-preview" element={<InvoicePreview />} />
|
|
<Route path="/invoice-preview-minimal" element={<InvoicePreviewMinimal />} />
|
|
<Route path="/whats-new" element={<ReleaseNotes />} />
|
|
<Route path="/release-notes" element={<ReleaseNotes />} />
|
|
<Route path="/privacy" element={<PrivacyPolicy />} />
|
|
<Route path="/terms" element={<TermsOfService />} />
|
|
</Routes>
|
|
</Layout>
|
|
</Router>
|
|
</ErrorBoundary>
|
|
</HelmetProvider>
|
|
);
|
|
}
|
|
|
|
export default App;
|