URL to Markdown Link Converter
Convert URLs in text to Markdown links with auto-fetched page titles. Detects images for  syntax. Copy or download results instantly.
About
Raw URL dumps are unreadable in documentation and notes. This tool extracts every URL from arbitrary text, fetches each page's title element via live HTTP request, and generates proper Markdown link syntax: [Title](url). Image URLs (detected by extension: .png, .jpg, .gif, .webp, etc.) are automatically formatted as . The tool uses CORS proxy cascading to handle cross-origin restrictions inherent in browser-based fetching. Limitation: some sites block proxy requests or return empty titles. In those cases the converter falls back to a cleaned pathname as the link label.
Markdown link correctness matters. A broken or unlabeled link in a README or wiki degrades findability and reader trust. Manually copying titles from dozens of tabs is error-prone. This tool processes bulk URL lists in seconds. Note: fetching is sequential with a per-request timeout of 8s to avoid hanging on unresponsive servers. Titles are extracted from the HTML <title> tag only. JavaScript-rendered titles (SPA pages without SSR) may not resolve correctly.
Formulas
The conversion pipeline follows a deterministic three-stage process for each input line.
Stage 1 β Extract: Apply URL regex pattern to input text. The pattern matches schemes http, https, ftp followed by :// and valid URI characters per RFC 3986. Trailing punctuation (., ,, )) is stripped via lookahead.
Stage 2 β Classify: For each extracted URL, test the pathname against the image extension set E = {.png, .jpg, .jpeg, .gif, .svg, .webp, .avif, .bmp, .ico, .tiff}.
Stage 3 β Resolve Title: For non-image URLs, fetch the HTML document through a CORS proxy chain. Extract content of the first <title> tag using the pattern <title[^>]*>(.+?)</title> with case-insensitive dotAll matching. If fetch fails or no title found, derive fallback label L from the URL pathname: split by /, take the last non-empty segment, replace hyphens and underscores with spaces, apply title case.
Where url is the raw extracted URL string, ext(url) extracts the file extension from the pathname component, and title is the resolved or fallback page title with special Markdown characters ([, ]) escaped.
Reference Data
| File Extension | Type | Markdown Output | MIME Category |
|---|---|---|---|
| .png | Image |  | image/png |
| .jpg | Image |  | image/jpeg |
| .jpeg | Image |  | image/jpeg |
| .gif | Image |  | image/gif |
| .svg | Image |  | image/svg+xml |
| .webp | Image |  | image/webp |
| .avif | Image |  | image/avif |
| .bmp | Image |  | image/bmp |
| .ico | Image |  | image/x-icon |
| .tiff | Image |  | image/tiff |
| .html | Page | [Title](url) | text/html |
| .htm | Page | [Title](url) | text/html |
| .php | Page | [Title](url) | text/html |
| (no extension) | Page | [Title](url) | text/html (assumed) |
| Document | [Filename](url) | application/pdf | |
| .md | Document | [Filename](url) | text/markdown |
| .json | Data | [Filename](url) | application/json |
| .xml | Data | [Filename](url) | application/xml |
| .csv | Data | [Filename](url) | text/csv |
| .mp4 | Video | [Filename](url) | video/mp4 |