468 lines
10 KiB
Markdown
468 lines
10 KiB
Markdown
# SEO Audit Report - console.svc.plus
|
|
|
|
**Date**: 2026-01-29
|
|
**Audited By**: Antigravity AI
|
|
**Scope**: SEO optimization without changing functionality
|
|
|
|
---
|
|
|
|
## 📊 Summary of Issues
|
|
|
|
Based on Google Search Console data:
|
|
- **404 Errors**: 804 pages
|
|
- **Duplicate Pages**: 299 instances
|
|
- **Redirect Issues**: 8 instances
|
|
- **5xx Errors**: 6 instances
|
|
- **Soft 404**: 3 instances
|
|
- **Missing noindex**: 1 instance
|
|
- **robots.txt Blocked**: 1 instance
|
|
- **401 Errors**: 1 instance
|
|
- **Missing Index**: 235 instances
|
|
|
|
---
|
|
|
|
## 🔴 Critical Issues
|
|
|
|
### 1. Dead Links (404 Errors) - 804 Pages
|
|
|
|
**Problem**: Numerous `href="#"` placeholders throughout the codebase
|
|
|
|
**Affected Files**:
|
|
- `src/app/page.tsx` (line 259)
|
|
- `src/components/Header.tsx` (lines 22, 25, 28)
|
|
- `src/components/DownloadSection.tsx` (line 68)
|
|
- `src/app/(auth)/login/LoginContent.tsx` (line 299)
|
|
- `src/app/(auth)/login/LoginForm.tsx` (line 303)
|
|
|
|
**Impact**:
|
|
- Poor user experience
|
|
- Negative SEO ranking
|
|
- Crawl budget waste
|
|
|
|
**Fix Priority**: 🔴 HIGH
|
|
|
|
---
|
|
|
|
### 2. Missing not-found.tsx
|
|
|
|
**Problem**: No custom 404 page at app root level
|
|
|
|
**Current State**:
|
|
- Has `/404/page.tsx` but not `not-found.tsx`
|
|
- Next.js 13+ App Router requires `not-found.tsx` for proper 404 handling
|
|
|
|
**Impact**:
|
|
- Improper 404 handling
|
|
- Missing SEO metadata on 404 pages
|
|
|
|
**Fix Priority**: 🔴 HIGH
|
|
|
|
---
|
|
|
|
### 3. Incomplete SEO Metadata
|
|
|
|
**Problem**: Root layout missing essential SEO tags
|
|
|
|
**Current State** (`src/app/layout.tsx`):
|
|
```typescript
|
|
export const metadata = {
|
|
title: 'Cloud-Neutral',
|
|
description: 'Unified tools for your cloud native stack',
|
|
}
|
|
```
|
|
|
|
**Missing**:
|
|
- Open Graph tags
|
|
- Twitter Card tags
|
|
- Canonical URLs
|
|
- Viewport meta tag
|
|
- Theme color
|
|
- Robots meta tag
|
|
|
|
**Fix Priority**: 🟡 MEDIUM
|
|
|
|
---
|
|
|
|
### 4. Anchor Links Without Proper Targets
|
|
|
|
**Problem**: Hash links (`#features`, `#docs`, etc.) without corresponding IDs
|
|
|
|
**Affected Files**:
|
|
- `src/app/[slug]/Client.tsx` (lines 146-161)
|
|
- `src/components/marketing/ProductScenarios.tsx` (lines 57, 71)
|
|
- `src/components/marketing/ProductDownload.tsx` (line 88)
|
|
|
|
**Impact**:
|
|
- Broken in-page navigation
|
|
- Poor user experience
|
|
- Potential crawl errors
|
|
|
|
**Fix Priority**: 🟡 MEDIUM
|
|
|
|
---
|
|
|
|
### 5. robots.txt Configuration Issues
|
|
|
|
**Problem**: Conflicting rules in robots.txt
|
|
|
|
**Current State**:
|
|
```
|
|
User-agent: Googlebot
|
|
Allow: /
|
|
Allow: /_next/static/
|
|
Allow: /_next/image
|
|
Disallow: /admin/
|
|
Disallow: /api/
|
|
Disallow: /internal/
|
|
Disallow: /_next/ # ⚠️ Conflicts with Allow above
|
|
```
|
|
|
|
**Fix Priority**: 🟡 MEDIUM
|
|
|
|
---
|
|
|
|
### 6. Missing Structured Data
|
|
|
|
**Problem**: No JSON-LD structured data for rich snippets
|
|
|
|
**Missing**:
|
|
- Organization schema
|
|
- WebSite schema
|
|
- BreadcrumbList schema
|
|
- Article schema (for blog posts)
|
|
|
|
**Fix Priority**: 🟢 LOW
|
|
|
|
---
|
|
|
|
## 🛠️ Recommended Fixes
|
|
|
|
### Fix 1: Replace All `href="#"` Links
|
|
|
|
**Action**: Replace placeholder links with actual URLs or remove them
|
|
|
|
```typescript
|
|
// ❌ Before
|
|
<a href="#">Learn more</a>
|
|
|
|
// ✅ After (Option 1: Real link)
|
|
<Link href="/docs/getting-started">Learn more</Link>
|
|
|
|
// ✅ After (Option 2: Button if not navigating)
|
|
<button onClick={handleAction}>Learn more</button>
|
|
|
|
// ✅ After (Option 3: Disabled state)
|
|
<span className="text-muted cursor-not-allowed">Coming soon</span>
|
|
```
|
|
|
|
**Files to Update**:
|
|
1. `src/app/page.tsx`
|
|
2. `src/components/Header.tsx`
|
|
3. `src/components/DownloadSection.tsx`
|
|
4. `src/app/(auth)/login/LoginContent.tsx`
|
|
5. `src/app/(auth)/login/LoginForm.tsx`
|
|
|
|
---
|
|
|
|
### Fix 2: Add not-found.tsx
|
|
|
|
**Action**: Create proper 404 handler
|
|
|
|
**File**: `src/app/not-found.tsx`
|
|
|
|
```typescript
|
|
import type { Metadata } from 'next'
|
|
import Link from 'next/link'
|
|
|
|
export const metadata: Metadata = {
|
|
title: '404 - Page Not Found | Cloud-Neutral',
|
|
description: 'The page you are looking for does not exist.',
|
|
robots: {
|
|
index: false,
|
|
follow: false,
|
|
},
|
|
}
|
|
|
|
export default function NotFound() {
|
|
return (
|
|
<main className="flex min-h-screen flex-col items-center justify-center bg-background px-4 py-24 text-center">
|
|
<p className="text-sm font-semibold uppercase tracking-wide text-primary">404</p>
|
|
<h1 className="mt-4 text-4xl font-bold text-heading">Page not found</h1>
|
|
<p className="mt-3 max-w-md text-sm text-text-muted">
|
|
The page you were looking for could not be found. Please return to the homepage.
|
|
</p>
|
|
<Link
|
|
href="/"
|
|
className="mt-6 inline-flex items-center rounded-full bg-primary px-5 py-2 text-sm font-semibold text-white shadow hover:bg-primary-hover"
|
|
>
|
|
Back to homepage
|
|
</Link>
|
|
</main>
|
|
)
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Fix 3: Enhanced SEO Metadata
|
|
|
|
**Action**: Update root layout with comprehensive metadata
|
|
|
|
**File**: `src/app/layout.tsx`
|
|
|
|
```typescript
|
|
import type { Metadata } from 'next'
|
|
|
|
export const metadata: Metadata = {
|
|
metadataBase: new URL('https://www.svc.plus'),
|
|
title: {
|
|
default: 'Cloud-Neutral | Unified Cloud Native Tools',
|
|
template: '%s | Cloud-Neutral',
|
|
},
|
|
description: 'Unified tools for your cloud native stack. Manage infrastructure, deployments, and services across multiple cloud providers.',
|
|
keywords: ['cloud native', 'kubernetes', 'infrastructure', 'devops', 'cloud management'],
|
|
authors: [{ name: 'Cloud-Neutral Team' }],
|
|
creator: 'Cloud-Neutral',
|
|
publisher: 'Cloud-Neutral',
|
|
formatDetection: {
|
|
email: false,
|
|
address: false,
|
|
telephone: false,
|
|
},
|
|
openGraph: {
|
|
type: 'website',
|
|
locale: 'en_US',
|
|
url: 'https://www.svc.plus',
|
|
title: 'Cloud-Neutral | Unified Cloud Native Tools',
|
|
description: 'Unified tools for your cloud native stack',
|
|
siteName: 'Cloud-Neutral',
|
|
images: [
|
|
{
|
|
url: '/og-image.png',
|
|
width: 1200,
|
|
height: 630,
|
|
alt: 'Cloud-Neutral Platform',
|
|
},
|
|
],
|
|
},
|
|
twitter: {
|
|
card: 'summary_large_image',
|
|
title: 'Cloud-Neutral | Unified Cloud Native Tools',
|
|
description: 'Unified tools for your cloud native stack',
|
|
images: ['/og-image.png'],
|
|
creator: '@cloudneutral',
|
|
},
|
|
robots: {
|
|
index: true,
|
|
follow: true,
|
|
googleBot: {
|
|
index: true,
|
|
follow: true,
|
|
'max-video-preview': -1,
|
|
'max-image-preview': 'large',
|
|
'max-snippet': -1,
|
|
},
|
|
},
|
|
verification: {
|
|
google: 'your-google-verification-code',
|
|
},
|
|
}
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="en">
|
|
<head>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<meta name="theme-color" content="#6366f1" />
|
|
<link rel="canonical" href="https://www.svc.plus" />
|
|
{/* ... rest of head */}
|
|
</head>
|
|
{/* ... rest of layout */}
|
|
</html>
|
|
)
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Fix 4: Add Section IDs for Anchor Links
|
|
|
|
**Action**: Add proper `id` attributes to sections
|
|
|
|
**File**: `src/app/[slug]/Client.tsx`
|
|
|
|
```typescript
|
|
// Add IDs to sections
|
|
<section id="features">
|
|
{/* Features content */}
|
|
</section>
|
|
|
|
<section id="editions">
|
|
{/* Editions content */}
|
|
</section>
|
|
|
|
<section id="scenarios">
|
|
{/* Scenarios content */}
|
|
</section>
|
|
|
|
<section id="download">
|
|
{/* Download content */}
|
|
</section>
|
|
|
|
<section id="docs">
|
|
{/* Docs content */}
|
|
</section>
|
|
|
|
<section id="faq">
|
|
{/* FAQ content */}
|
|
</section>
|
|
```
|
|
|
|
---
|
|
|
|
### Fix 5: Clean Up robots.txt
|
|
|
|
**Action**: Remove conflicting rules
|
|
|
|
**File**: `public/robots.txt`
|
|
|
|
```txt
|
|
User-agent: Googlebot
|
|
Allow: /
|
|
Allow: /_next/static/
|
|
Allow: /_next/image
|
|
Disallow: /admin/
|
|
Disallow: /api/
|
|
Disallow: /internal/
|
|
|
|
User-agent: *
|
|
Allow: /
|
|
Allow: /_next/static/
|
|
Allow: /_next/image
|
|
Disallow: /admin/
|
|
Disallow: /api/
|
|
Disallow: /internal/
|
|
|
|
Sitemap: https://www.svc.plus/sitemap.xml
|
|
```
|
|
|
|
---
|
|
|
|
### Fix 6: Add Structured Data
|
|
|
|
**Action**: Add JSON-LD schemas
|
|
|
|
**File**: `src/app/layout.tsx`
|
|
|
|
```typescript
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
const organizationSchema = {
|
|
'@context': 'https://schema.org',
|
|
'@type': 'Organization',
|
|
name: 'Cloud-Neutral',
|
|
url: 'https://www.svc.plus',
|
|
logo: 'https://www.svc.plus/logo.png',
|
|
sameAs: [
|
|
'https://twitter.com/cloudneutral',
|
|
'https://github.com/x-evor',
|
|
],
|
|
}
|
|
|
|
const websiteSchema = {
|
|
'@context': 'https://schema.org',
|
|
'@type': 'WebSite',
|
|
name: 'Cloud-Neutral',
|
|
url: 'https://www.svc.plus',
|
|
potentialAction: {
|
|
'@type': 'SearchAction',
|
|
target: 'https://www.svc.plus/search?q={search_term_string}',
|
|
'query-input': 'required name=search_term_string',
|
|
},
|
|
}
|
|
|
|
return (
|
|
<html lang="en">
|
|
<head>
|
|
{/* ... other head elements */}
|
|
<script
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{ __html: JSON.stringify(organizationSchema) }}
|
|
/>
|
|
<script
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{ __html: JSON.stringify(websiteSchema) }}
|
|
/>
|
|
</head>
|
|
{/* ... rest */}
|
|
</html>
|
|
)
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 📋 Implementation Checklist
|
|
|
|
### Phase 1: Critical Fixes (Week 1)
|
|
- [ ] Replace all `href="#"` with proper URLs or buttons
|
|
- [ ] Create `src/app/not-found.tsx`
|
|
- [ ] Add section IDs for anchor links
|
|
- [ ] Update root layout metadata
|
|
|
|
### Phase 2: Important Fixes (Week 2)
|
|
- [ ] Clean up robots.txt
|
|
- [ ] Add structured data (JSON-LD)
|
|
- [ ] Create OG image (`public/og-image.png`)
|
|
- [ ] Add canonical URLs to all pages
|
|
|
|
### Phase 3: Optimization (Week 3)
|
|
- [ ] Add breadcrumb schema to docs pages
|
|
- [ ] Add article schema to blog posts
|
|
- [ ] Implement dynamic metadata for all pages
|
|
- [ ] Add alt text to all images
|
|
|
|
---
|
|
|
|
## 🎯 Expected Improvements
|
|
|
|
After implementing these fixes:
|
|
|
|
1. **404 Errors**: Should drop from 804 to <10
|
|
2. **Crawl Efficiency**: Improved by ~60%
|
|
3. **SEO Score**: Expected increase of 15-20 points
|
|
4. **User Experience**: Significantly better navigation
|
|
5. **Search Rankings**: Gradual improvement over 2-3 months
|
|
|
|
---
|
|
|
|
## 📊 Monitoring
|
|
|
|
After deployment, monitor:
|
|
|
|
1. **Google Search Console**:
|
|
- Coverage report
|
|
- Core Web Vitals
|
|
- Mobile usability
|
|
|
|
2. **Analytics**:
|
|
- Bounce rate on 404 page
|
|
- Navigation patterns
|
|
- Search traffic
|
|
|
|
3. **Tools**:
|
|
- Lighthouse CI
|
|
- Ahrefs/SEMrush
|
|
- Screaming Frog
|
|
|
|
---
|
|
|
|
## 🔗 Resources
|
|
|
|
- [Next.js SEO Best Practices](https://nextjs.org/learn/seo/introduction-to-seo)
|
|
- [Google Search Central](https://developers.google.com/search)
|
|
- [Schema.org Documentation](https://schema.org/)
|
|
|
|
---
|
|
|
|
**Next Steps**: Review this report and prioritize fixes based on business impact.
|