Files
gitea-mirror/www/docs/SEO_KEYWORDS.md
2025-10-03 11:05:55 +05:30

16 KiB

SEO Keywords & Programmatic Content Strategy for Gitea Mirror

Goal: Generate 5,000-15,000 organic visits/month within 6-12 months Strategy: Low-effort, high-intent pages targeting long-tail keywords Focus: Problem-solving content over generic tool descriptions


🎯 LOW-HANGING FRUIT: Quick Wins (Start This Week)

Tier 1: Ultra Low-Effort, High-Intent Pages (1-2 hours each)

These are simple template pages with minimal content but high search volume and buyer intent.

Page Keyword Monthly Searches Difficulty Effort Priority
/use-cases/backup-github-repositories "backup github repositories" 500-1K Low (15) 1h
/use-cases/migrate-github-to-gitea "migrate github to gitea" 300-800 Low (10) 1h
/solutions/github-disaster-recovery "github disaster recovery" 200-500 Low (12) 1h
/vs/manual-vs-automated-github-migration "automated github migration" 150-400 Very Low (8) 1.5h
/guides/setup-gitea-mirror-docker "gitea mirror docker setup" 100-300 Very Low (5) 2h

Why these work:

  • Specific, actionable queries ("how to backup", "migrate to")
  • Low competition (KD < 15)
  • High commercial intent (ready to install)
  • Can reuse existing docs content

Template for these pages: 400-600 words, 30 minutes to write each


📊 KEYWORD STRATEGY: 3-Tier Approach

Tier 1: Problem-Solving Keywords (HIGHEST PRIORITY)

Intent: "I have this specific problem" Effort: Low (template-based) Pages needed: 15

Primary Keyword Secondary Keywords Est. Traffic Page URL
backup github repositories github backup tool, automated github backup 500/mo /use-cases/backup-github-repositories
migrate github to gitea github gitea migration, import github to gitea 400/mo /use-cases/migrate-github-to-gitea
github disaster recovery backup github organization, github downtime backup 250/mo /solutions/github-disaster-recovery
sync github to self-hosted self-hosted github alternative, github to gitea sync 200/mo /use-cases/sync-github-to-self-hosted-gitea
preserve github history github history backup, archive github repos 180/mo /use-cases/preserve-github-history
github vendor lock-in avoid github lock-in, github alternatives 150/mo /solutions/avoid-vendor-lock-in
github backup automation automate github mirror, scheduled github backup 140/mo /use-cases/github-backup-automation
mirror starred repositories backup starred repos, export github stars 120/mo /use-cases/starred-repos-collection
github offline access offline git mirror, air-gapped github 100/mo /solutions/need-offline-git-access
github rate limits bypass github api limits, github api alternatives 90/mo /solutions/github-rate-limits

Total Tier 1 Traffic Potential: ~2,500 visits/month


Tier 2: Feature-Specific Keywords (MEDIUM PRIORITY)

Intent: "I want to do this specific thing" Effort: Medium (requires explaining features) Pages needed: 12

Primary Keyword Est. Traffic Page URL
mirror github issues 80/mo /features/github-issues-migration
sync github releases 70/mo /features/github-releases-sync
mirror github wiki 60/mo /features/wiki-migration
preserve github organization structure 50/mo /features/organization-structure-preservation
mirror private github repos 180/mo /features/private-repository-mirroring
github metadata migration 45/mo /features/metadata-migration
scheduled github sync 120/mo /features/scheduled-synchronization
batch github migration 40/mo /features/batch-repository-processing
github pull request migration 35/mo /features/pull-request-mirroring
git lfs mirror 30/mo /features/git-lfs-support

Total Tier 2 Traffic Potential: ~1,200 visits/month


Tier 3: Comparison Keywords (HIGH CONVERSION)

Intent: "Evaluating options" Effort: Medium-High (research required) Pages needed: 8

Primary Keyword Est. Traffic Conversion Potential Page URL
github backup tools comparison 250/mo Very High /vs/github-backup-solutions
gitea vs github 800/mo Medium /vs/github-vs-gitea
manual vs automated migration 60/mo High /vs/manual-vs-automated-migration
git clone vs mirror 45/mo Medium /vs/git-clone-vs-automated-sync
gitea alternatives 150/mo Medium /alternatives
self-hosted git servers 400/mo Low /vs/self-hosted-vs-cloud-git

Total Tier 3 Traffic Potential: ~1,700 visits/month


🚀 IMPLEMENTATION ROADMAP: 4-Week Sprint

Week 1: Foundation (5 pages)

Goal: Get first pages indexed, establish content structure

Day 1-2: Setup (4 hours)

  • Create Astro content collections (src/content/config.ts)
  • Build page templates (use-cases, features, solutions)
  • Setup SEO component with structured data
  • Create sitemap generator

Day 3-5: Core Content (8 hours)

  • /use-cases/backup-github-repositories - 600 words
  • /use-cases/migrate-github-to-gitea - 600 words
  • /solutions/github-disaster-recovery - 500 words
  • /features/automatic-github-mirroring - 700 words
  • /vs/manual-vs-automated-migration - 800 words

Day 6-7: Technical Setup (3 hours)

  • Submit sitemap to Google Search Console
  • Setup Google Analytics 4
  • Add schema.org markup
  • Create robots.txt
  • Setup canonical URLs

Week 1 Target: 5 pages live, indexed by Google


Week 2: Scale Content (10 pages)

Goal: Batch create similar pages using templates

Use Case Pages (5 pages, 1 hour each):

  • /use-cases/sync-github-to-self-hosted-gitea
  • /use-cases/preserve-github-history
  • /use-cases/github-backup-automation
  • /use-cases/starred-repos-collection
  • /use-cases/vendor-lock-in-prevention

Feature Pages (5 pages, 1.5 hours each):

  • /features/private-repository-mirroring
  • /features/scheduled-synchronization
  • /features/github-issues-migration
  • /features/github-releases-sync
  • /features/metadata-migration

Week 2 Target: 15 total pages, monitor first impressions in GSC


Week 3: Problem-Solution Focus (8 pages)

Goal: Target high-intent problem queries

Solution Pages (6 pages, 45 min each):

  • /solutions/avoid-vendor-lock-in
  • /solutions/need-offline-git-access
  • /solutions/github-rate-limits
  • /solutions/github-pricing-too-expensive
  • /solutions/comply-with-data-regulations
  • /solutions/preserve-deleted-github-repos

Guide Pages (2 pages, 2 hours each):

  • /guides/setup-gitea-mirror-docker
  • /guides/migrate-github-organization-to-gitea

Week 3 Target: 23 total pages, start seeing traffic


Week 4: Comparison & Polish (7 pages + optimization)

Goal: High-conversion comparison content + optimization

Comparison Pages (4 pages, 2 hours each):

  • /vs/github-backup-solutions
  • /vs/github-vs-gitea
  • /vs/self-hosted-vs-cloud-git
  • /alternatives

Integration Pages (3 pages, 1 hour each):

  • /integrations/docker-compose
  • /integrations/kubernetes
  • /integrations/helm-charts

Optimization (8 hours):

  • Add internal linking between all pages
  • Optimize images (WebP, alt text)
  • Add FAQ sections to top 10 pages
  • Create content calendar for Month 2

Week 4 Target: 30 total pages, 50-100 visitors/week


📝 CONTENT TEMPLATES

Template 1: Use Case Page (400-600 words, 30 min)

# [Use Case Title] - Gitea Mirror

> **In this guide**: Learn how to [solve specific problem] using Gitea Mirror's automated [feature].

## The Problem

[2-3 sentences describing the pain point]

**Common challenges:**
- Challenge 1
- Challenge 2
- Challenge 3

## How Gitea Mirror Solves This

[3-4 sentences explaining the solution]

**Key capabilities:**
- ✅ Capability 1
- ✅ Capability 2
- ✅ Capability 3

## Quick Start (5 Minutes)

\`\`\`bash
# Step 1: Pull the Docker image
docker pull giteamirror/gitea-mirror:latest

# Step 2: Run with environment variables
docker run -d \\
  -e GITHUB_TOKEN=your_token \\
  -e GITEA_URL=https://gitea.example.com \\
  giteamirror/gitea-mirror
\`\`\`

[2 sentences on what happens next]

## Real-World Example

[Short scenario: "A DevOps team needed to..."]

## Related Features

- [Link to feature 1]
- [Link to feature 2]

## Get Started

[CTA button/link to GitHub repo]

---

**Keywords**: [primary], [secondary], [tertiary]
**Last Updated**: [Date]

Why this works:

  • Answers search query immediately
  • Shows code (high engagement)
  • Internal links (SEO juice)
  • Clear CTA
  • Total time: 30 minutes

Template 2: Feature Page (500-700 words, 45 min)

# [Feature Name] - Gitea Mirror

> Automatically [feature benefit] from GitHub to Gitea with zero manual work.

## What Is [Feature Name]?

[2-3 sentences explaining the feature]

## Why You Need This

**Without Gitea Mirror:**
- ❌ Manual problem 1
- ❌ Manual problem 2
- ❌ Manual problem 3

**With Gitea Mirror:**
- ✅ Automated solution 1
- ✅ Automated solution 2
- ✅ Automated solution 3

## How It Works

1. **Step 1**: [Action]
2. **Step 2**: [Action]
3. **Step 3**: [Result]

## Configuration

\`\`\`yaml
# Example configuration
feature_enabled: true
option1: value
option2: value
\`\`\`

## Use Cases

### Use Case 1
[Scenario where this feature helps]

### Use Case 2
[Another scenario]

## Best Practices

- Tip 1
- Tip 2
- Tip 3

## See It In Action

[Screenshot or GIF]

## Get Started

[CTA]

---

**Related**:
- [Use case page]
- [Guide page]

Template 3: Solution Page (300-500 words, 20 min)

# [Problem Statement] - Solved

> **The Problem**: [One sentence problem]
> **The Solution**: Gitea Mirror's automated [approach]

## Why This Problem Matters

[2 sentences on impact]

**Consequences of not solving:**
1. Consequence 1
2. Consequence 2
3. Consequence 3

## How Gitea Mirror Fixes This

[Explain the solution in 3-4 sentences]

## Implementation

\`\`\`bash
# 2-3 line code snippet
\`\`\`

## Success Story

"[Quote or short anecdote]"

## Next Steps

1. [Link to getting started]
2. [Link to relevant feature]

[CTA button]

Total time: 20 minutes


🎨 SEO OPTIMIZATION CHECKLIST

On-Page SEO (Per Page)

✅ Title tag: [Keyword] - Gitea Mirror (50-60 chars)
✅ Meta description with CTA (150-160 chars)
✅ H1 includes primary keyword
✅ URL slug = primary keyword
✅ First paragraph mentions keyword
✅ H2s include semantic variations
✅ Image alt text descriptive
✅ Internal links (3-5 per page)
✅ External links (1-2 authoritative sources)
✅ Schema.org markup (SoftwareApplication)
✅ Canonical URL set
✅ Mobile responsive
✅ Page speed < 3s

Content Quality Checks

✅ Answers search intent completely
✅ 400-1500 word count (based on competition)
✅ Code examples where relevant
✅ Screenshots/visuals
✅ Updated date visible
✅ Clear CTA
✅ Related content links
✅ No keyword stuffing (1-2% density)

📈 TRACKING & METRICS

Week 1-2 KPIs

  • All pages indexed in Google (check GSC)
  • 0 technical SEO errors (screaming frog)
  • < 3s page load time
  • Mobile usability 100/100

Week 3-4 KPIs

  • 10+ impressions/day in GSC
  • 3+ clicks/day from organic
  • 1+ page ranking in top 50

Month 2 Goals

  • 100+ impressions/day
  • 20+ clicks/day
  • 10+ keywords in top 50
  • 5+ keywords in top 20

Month 3 Goals

  • 500+ impressions/day
  • 50+ clicks/day
  • 20+ keywords in top 20
  • 10+ keywords in top 10

🔗 INTERNAL LINKING STRATEGY

Hub & Spoke Model

  1. Homepage
  2. /use-cases/migrate-github-to-gitea (main use case)
  3. /features/automatic-github-mirroring (main feature)
  • Use case pages link to: Related features, guides, solutions
  • Feature pages link to: Use cases, guides
  • Solution pages link to: Use cases, features
  • Guide pages link to: Features, use cases

Example:

/use-cases/backup-github-repositories
  → Links to:
    - /features/scheduled-synchronization
    - /features/automatic-github-mirroring
    - /guides/setup-gitea-mirror-docker
    - /solutions/github-disaster-recovery

💡 CONTENT HACKS: Work Smarter

1. Batch Similar Pages (2x faster)

Write all "use case" pages in one session using the template. Copy structure, change specifics.

2. Reuse Existing Content

  • Main repo README → Use case pages
  • Docker docs → Guide pages
  • GitHub issues → Problem pages

3. AI-Assisted Expansion

  • Write 200-word outline manually
  • Expand with AI to 600 words
  • Edit for accuracy (10 min)
  • Time saved: 50%

4. Screenshot Once, Use Everywhere

Create a /public/screenshots/ library:

  • Dashboard view
  • Configuration screen
  • Migration in progress
  • Results page

Reuse across all pages.

5. Schema Markup Template

Create one JSON-LD template, reuse with variable substitution:

{
  "@context": "https://schema.org",
  "@type": "SoftwareApplication",
  "name": "Gitea Mirror",
  "description": "[PAGE_DESCRIPTION]",
  "url": "[PAGE_URL]"
}

🎯 MONTH 2-3 EXPANSION PLAN

Month 2: Depth Over Breadth

Goal: Make existing pages rank higher

Activities:

  • Add 200 words to each existing page
  • Add FAQ sections (5 Q&As per page)
  • Create 10 more guide pages (tutorials)
  • Add video embeds (YouTube shorts)
  • Guest post on Dev.to (backlinks)

New Pages (10):

  • 5 more use case pages
  • 5 advanced guides

Month 3: Authority Building

Goal: Establish Gitea Mirror as THE GitHub migration resource

Activities:

  • Ultimate Guide: "Complete GitHub to Gitea Migration Guide" (3,000 words)
  • Comparison matrix: All GitHub backup tools
  • Interactive tool: "Migration time calculator"
  • Video tutorials (5-10 minutes each)
  • Community: Add testimonials/case studies

New Pages (15):

  • 5 integration pages
  • 5 technical spec pages
  • 5 advanced solution pages

🏆 SUCCESS METRICS (6 Months)

Conservative Target

  • Pages: 50 indexed
  • Traffic: 5,000 visits/month
  • Keywords: 30 in top 20
  • Backlinks: 15-20
  • GitHub Stars: +50 from organic

Optimistic Target

  • Pages: 80 indexed
  • Traffic: 12,000 visits/month
  • Keywords: 50 in top 20, 20 in top 10
  • Backlinks: 40-50
  • GitHub Stars: +200 from organic

🔧 TECHNICAL SETUP (Do Once)

Astro Content Collections

// src/content/config.ts
import { defineCollection, z } from 'astro:content';

const useCases = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string(),
    description: z.string(),
    keywords: z.array(z.string()),
    problem: z.string(),
    solution: z.string(),
    difficulty: z.enum(['beginner', 'intermediate', 'advanced']),
    timeToRead: z.number(),
    relatedPages: z.array(z.string()).optional(),
  }),
});

export const collections = {
  'use-cases': useCases,
  'features': defineCollection({ /* ... */ }),
  'guides': defineCollection({ /* ... */ }),
  'solutions': defineCollection({ /* ... */ }),
  'vs': defineCollection({ /* ... */ }),
};

Dynamic Route Template

---
// src/pages/use-cases/[...slug].astro
import { getCollection } from 'astro:content';

export async function getStaticPaths() {
  const useCases = await getCollection('use-cases');
  return useCases.map(entry => ({
    params: { slug: entry.slug },
    props: { entry },
  }));
}

const { entry } = Astro.props;
const { Content } = await entry.render();
---

<Layout title={entry.data.title} description={entry.data.description}>
  <article>
    <h1>{entry.data.title}</h1>
    <Content />
  </article>
</Layout>

📋 QUICK ACTION CHECKLIST

Today:

  • Create content collections structure
  • Write first use case page (1 hour)
  • Setup Google Search Console

This Week:

  • Complete 5 high-priority pages
  • Submit sitemap
  • Add schema markup

This Month:

  • 30 pages live
  • Internal linking complete
  • First organic traffic

Last Updated: January 2025 Next Review: February 2025 Owner: [Your Team]