Overview
Plain.ovh is built with SvelteKit and deployed on Netlify. It uses serverless functions for URL analysis and shortlink management.
Features
- URL Analysis: Follows redirects, cleans parameters, provides domain insights.
- Shortlinks: Creates transparent short URLs with optional stats.
- Domain Similarity: Compares domains against a list of known brands.
- Privacy-First: No user data storage, aggregated stats only.
User Guide
Quick start
Paste a URL into the Analyzer on the home page and click Analyze. The UI will follow redirects, produce a Final URL (the exact destination), and a Clean Link where common trackers have been removed while affiliate/support parameters are preserved by default.
Actions
- Copy Redirect Story: copies the hop-by-hop redirect chain as plain text.
- Copy JSON: copies a JSON representation of the full analysis (for debugging or sharing).
- Copy for Reddit: copies a Markdown-formatted table ready to paste into Reddit comments or posts.
- Copy Clean Link: copies the cleaned final URL (trackers removed; affiliate/support parameters kept).
- Copy Final URL: copies the final resolved destination exactly as fetched.
- Create Safe Shortlink: generates a transparent shortlink on plain.ovh that redirects to the cleaned URL.
Clean vs Final
Clean Link removes known tracking parameters (e.g., any utm_* params, gclid, etc.) and preserves common affiliate/support tags (for example tag, aff_id, affiliate_id, ref) so partners still earn credit when appropriate. The Final URL is the exact URL reached after following the HTTP redirects.
Examples
Example URL with two trackers and one affiliate parameter:
https://example.com/product/widget?utm_source=newsletter&utm_medium=email&aff_id=partner123 Result: utm_source and utm_medium would be removed; aff_id=partner123 would be kept.
Shortlinks & Stats
Shortlinks are created under /s/<slug>. Stats are aggregated only (click counts and optional top countries) — no IP addresses are stored.
Troubleshooting
- INVALID_URL: ensure your input starts with
http://orhttps://. - FETCH_TIMEOUT: request timed out; try again or increase the server timeout config if you control the deployment.
- TOO_MANY_REDIRECTS / LOOP_DETECTED: destination has excessive or cyclic redirects; try the destination directly or a different mirror.
API Quick Examples
Analyze with curl:
curl "https://plain.ovh/api/analyze?url=https%3A%2F%2Fexample.com%2Fpath%3Futm_source%3Dnews" Create a shortlink:
curl -X POST "https://plain.ovh/api/shorten" -H "Content-Type: application/json" -d '{ "destinationUrl": "https://example.com" }' Security & Privacy
- Plain.ovh focuses on privacy: we aggregate stats only and do not store IPs tied to clicks.
- Affiliate parameters are preserved by default to avoid breaking partner credit.
- Always inspect unknown links with the analyzer before visiting them.
Contributing & Support
Contributions and issues are welcome — please open an issue or pull request in the project repository. For quick questions, use the issue tracker.
API Reference
Analyze URL
GET /api/analyze?url={encoded-url}
Analyzes a URL and returns redirect chain, cleaned URL, and insights.
Response
{
"inputUrl": "https://example.com",
"finalUrl": "https://example.com/clean",
"hops": [
{
"url": "https://example.com",
"status": 301,
"kind": "destination"
}
],
"cleanUrl": "https://example.com/clean",
"removedParams": ["utm_source"],
"keptParams": ["tag"],
"explanation": "Removed 1 tracking parameter(s). Kept affiliate/support parameters by default.",
"insights": {
"https": true,
"domain": "example.com",
"domainAge": {
"registeredAt": "2020-01-01",
"ageYears": 5,
"source": "rdap"
},
"origin": {
"country": "US",
"source": "rdap"
},
"domainSimilarity": {
"source": "default",
"matches": [
{
"name": "Example Brand",
"officialDomains": ["example.com"],
"score": 1.0,
"isOfficial": true,
"reason": "Matches an official domain."
}
]
},
"tech": ["Cloudflare"],
"warnings": []
}
} Create Shortlink
POST /api/shorten
Creates a shortlink for the given destination URL.
Request Body
{
"destinationUrl": "https://example.com",
"slug": "optional-custom-slug"
} Response
{
"shortUrl": "https://plain.ovh/s/abc123"
} Get Shortlink Stats
GET /api/stats?slug={slug}
Returns aggregated stats for a shortlink.
Response
{
"slug": "abc123",
"clickCount": 42,
"countryTop": {
"US": 20,
"GB": 15
}
}