Make your Git repositories discoverable.
Just like web SEO helps pages rank in search engines, Git SEO helps repositories get discovered on GitHub, GitLab, Bitbucket, and across git forges.
git-seo is a CLI tool that:
-
Analyzes repository metadata, README quality, and social signals
-
Scores discoverability across multiple dimensions
-
Recommends actionable improvements
-
Compares repositories side-by-side
# Clone the repository
git clone https://gitlab.com/hyperpolymath/git-seo.git
cd git-seo
# Install dependencies
julia --project=. -e 'using Pkg; Pkg.instantiate()'
# Run directly
julia --project=. bin/git-seo analyze https://github.com/JuliaLang/juliagit-seo analyze https://github.com/JuliaLang/juliaExample output:
Git SEO Analysis Report
==================================================
Repository: JuliaLang/julia
Forge: Github
Overall Score: 78.5/100 (78.5%)
Category Scores
--------------------------------------------------
Metadata 22.0/25.0
Readme 28.0/30.0
Social 15.5/20.0
Activity 10.0/15.0
Quality 8.0/10.0
Recommendations
--------------------------------------------------
1. Add more topics/tags (aim for 5-10 relevant keywords)Apply safe fixes interactively with the --apply flag:
git-seo optimize https://github.com/user/repo --applyThe interactive wizard categorizes fixes by risk level:
-
π’ SAFE (API-only, reversible): Description updates, topic additions
-
π‘ MEDIUM (file modifications): LICENSE creation, badge injection, section additions (v0.4.0+)
-
π΄ UNSAFE (manual required): README creation from scratch
NEW in v0.4.0: GitLab API support, LICENSE file creation, README badge injection, README section addition
Example session:
Interactive Fix Application
==================================================
Found 3 recommendations:
π’ SAFE fixes (API-only, reversible): 2
π‘ MEDIUM fixes (file modifications): 0
π΄ UNSAFE fixes (manual required): 1
SAFE FIXES
[1/2] Add repository description
Current description: (empty)
Enter new description (50-350 chars, or 'skip'): CLI tool for repository SEO analysis
Apply this description? [Y/n]: y
β Description updated successfully
[2/2] Add more topics (aim for 5-10 relevant keywords)
Current topics (2): julia, cli
Suggestions: git, seo, optimization
Enter topics to ADD (comma-separated, or 'skip'): git, seo, github
Final topics (5): julia, cli, git, seo, github
Apply these topics? [Y/n]: y
β Topics updated successfully
Added: git, seo, github
β Applied 2/2 safe fixesRequirements:
-
GITHUB_TOKENorGITLAB_TOKENenvironment variable for API mutations -
Repository owner permissions
GitLab Support (NEW in v0.4.0):
# Analyze GitLab repository
export GITLAB_TOKEN="glpat-xxxxxxxxxxxxxxxxxxxx"
git-seo analyze https://gitlab.com/user/project --apply
# See docs/GITLAB-INTEGRATION.md for full detailsAnalyze multiple repositories from a file:
# Create repo list
cat > repos.txt <<EOF
https://github.com/user/repo1
https://github.com/user/repo2
https://github.com/user/repo3
EOF
# Batch analyze
git-seo batch repos.txt --output results.json
# Custom delay for rate limiting
git-seo batch repos.txt --output results.json --delay 2-
Name: Descriptive, kebab-case, keyword-rich
-
Description: 50-350 characters with primary keywords
-
Topics: 5-10 relevant tags
-
License: Clear SPDX-identified license
-
Badges (build status, version, downloads)
-
Clear one-liner description
-
Installation instructions
-
Usage examples with code blocks
-
Screenshots/GIFs for visual projects
| Variable | Description |
|---|---|
|
GitHub API token for higher rate limits |
|
GitLab API token (for private repos) |
|
Bitbucket API token |
Git-seo integrates with other hyperpolymath tools:
-
git-hud: Display SEO scores in unified repository dashboard
-
gitbot-fleet: Automated application of safe SEO improvements
-
reposystem: Bulk analysis of repository ecosystems
-
Hypatia: SEO scores as security/abandonment signals
See Integration Guide for details.
See CI/CD Example for GitHub Actions workflow.
Quick setup:
- name: SEO Quality Gate
run: |
git clone https://github.com/hyperpolymath/git-seo.git
cd git-seo
julia --project=. -e 'using Pkg; Pkg.instantiate()'
score=$(julia --project=. bin/git-seo analyze "$REPO_URL" --json | jq '.scores.total')
if (( $(echo "$score < 60" | bc -l) )); then
echo "SEO score too low: $score/100"
exit 1
fi# Enter Julia REPL with project
just repl
# Run tests
just test
# Validate RSR compliance
just validateThis project follows the Rhodium Standard Repositories framework.
just validate # Check RSR complianceSee CONTRIBUTING.adoc for guidelines.
PMPL-1.0-or-later License - see LICENSE.txt
GitHub: 60 requests/hour without token, 5000 with token
# Set token for higher limits
export GITHUB_TOKEN="ghp_..."
git-seo analyze https://github.com/user/repoGitLab/Bitbucket: Similar patterns with GITLAB_TOKEN and BITBUCKET_TOKEN
Ensure your token has repo:read scope (private repos) or public_repo (public only).