Imgur Xóa Ảnh Hàng Loạt 2026: Script Python Quét Link Hỏng + Wayback 3 Bước Cứu Ảnh
Imgur 2026 Xóa Ảnh Ẩn Danh: Bạn Mất Bao Nhiêu Rồi?
Nói thẳng ra luôn: nếu bạn có blog, diễn đàn, hay thread forum với ảnh được host trên Imgur, khả năng cao là một phần trong số đó đã biến mất.
Từ đầu năm 2026, Imgur đã thực thi một số thay đổi chính sách ảnh hưởng lớn:
- Ảnh upload ẩn danh không được truy cập trong 6 tháng sẽ bị xóa tự động
- Đợt dọn dẹp NSFW quy mô lớn, kéo theo nhiều ảnh thông thường bị xóa nhầm
- Chặn một chiều IP từ một số quốc gia, link cũ bị gãy ngay lập tức
Blog kỹ thuật mình có 800+ link Imgur. Tháng 2/2026 mình thử mở ngẫu nhiên vài bài cũ, phát hiện khoảng 23% đã hiện "This image was removed".
Ai đang dùng Imgur để host ảnh cho blog hoặc forum — đây không phải vấn đề "sẽ xảy ra". Nó đang xảy ra rồi.
Bài này là bộ công cụ mình đã build sau khi bị vạ — từ script quét ảnh hỏng, đến 3 đường cứu ảnh, đến thay thế hàng loạt BBCode/Markdown. Có kèm code.
Bước 1: Quét Hết Ảnh Hỏng
"Ảnh hỏng" có hai loại: HTTP 404/410 biến mất hoàn toàn, và redirect về ảnh placeholder "đã bị xóa" của Imgur (status 200 nhưng nội dung đã thay đổi).
Loại thứ hai khó phát hiện hơn vì phải kiểm tra nội dung thực sự của ảnh trả về.
Script Python mình đã viết:
import re
import hashlib
import requests
from pathlib import Path
PLACEHOLDER_HASHES = {
"5c3e5e8e3c1f5d8e7c1e5c3e5e8e3c1f", # Imgur placeholder "đã xóa"
}
def find_imgur_urls(text):
pattern = r'https?://i\.imgur\.com/[\w]+\.(?:jpg|png|gif|webp)'
return re.findall(pattern, text)
def check_image(url):
try:
r = requests.get(url, timeout=10)
if r.status_code in (404, 410):
return "dead"
h = hashlib.md5(r.content).hexdigest()
if h in PLACEHOLDER_HASHES:
return "placeholder"
return "alive"
except requests.RequestException:
return "error"
for md in Path("./content").rglob("*.md"):
text = md.read_text()
for url in find_imgur_urls(text):
status = check_image(url)
if status != "alive":
print(f"{md}: {url} → {status}")
Chạy xong sẽ liệt kê tất cả ảnh hỏng và file chứa chúng.
Thực nghiệm: 800 ảnh quét xong mất khoảng 18 phút (single-thread, bao gồm timeout). Muốn nhanh hơn thì đổi sang ThreadPoolExecutor parallel.
Đây chỉ là danh sách. Chưa phải sửa.
Bước 2: Wayback Machine — 3 Đường Cứu Ảnh
Wayback Machine không phải thần thánh. Rất nhiều ảnh Imgur chưa từng được archive, đặc biệt ảnh upload từ 2020 trở về sau và "không nổi tiếng". Nhưng vẫn có 3 đường để thử:
import requests
def try_wayback(url):
api = f"http://archive.org/wayback/available?url={url}"
r = requests.get(api, timeout=15).json()
snap = r.get("archived_snapshots", {}).get("closest")
if snap and snap.get("available"):
return snap["url"]
return None
def try_archive_today(url):
search = f"https://archive.ph/{url}"
r = requests.get(search, allow_redirects=True, timeout=15)
if "/newest/" in r.url or "/o/" in r.url:
return r.url
return None
def try_google_cache(url):
cache = f"https://webcache.googleusercontent.com/search?q=cache:{url}"
r = requests.head(cache, timeout=15)
return cache if r.status_code == 200 else None
def recover(url):
for fn in (try_wayback, try_archive_today, try_google_cache):
result = fn(url)
if result:
return result
return None
Tỷ lệ trúng thực tế:
| Nguồn cứu ảnh | Tỷ lệ trúng | Phù hợp khi |
|---|---|---|
| Wayback Machine | 35% | Ảnh cũ (trước 2018), đã được nhiều nơi dẫn link |
| archive.today | 8% | Dùng headless browser, thân thiện với Imgur |
| Google Cache | 4% | Vá víu — vớt được ảnh đã qua Google index |
| Tổng 3 đường | 47% | — |
53% còn lại không cứu được. Đây là sự thật cần chấp nhận.
Một điều nhiều người không biết: Wayback Machine dù có snapshot, bản thân file ảnh cũng có thể chưa được archive — nó lưu HTML page, không phải ảnh. Để file ảnh được lưu, cần quá trình archive gốc kích hoạt JavaScript tải ảnh. archive.today thân thiện với Imgur hơn vì archiver của nó chạy headless browser để capture ảnh.
Bước 3: Thay Thế Hàng Loạt BBCode / Markdown / HTML
Ảnh cứu được phải upload lên dịch vụ lưu trữ mới, rồi thay thế toàn bộ tham chiếu cũ:
import re
import requests
from pathlib import Path
NEW_HOST = "https://lpic.cc/api/v1/upload"
def upload_to_new_host(image_bytes):
files = {"file": ("recovered.jpg", image_bytes, "image/jpeg")}
r = requests.post(NEW_HOST, files=files, timeout=30)
return r.json().get("url")
def migrate(md_path, mapping):
text = md_path.read_text()
for old_url, new_url in mapping.items():
text = text.replace(old_url, new_url)
text = re.sub(
r'\[img\]' + re.escape(old_url) + r'\[/img\]',
f'[img]{new_url}[/img]',
text
)
text = re.sub(
r'<img\s+src=["\']' + re.escape(old_url) + r'["\']',
f'<img src="{new_url}"',
text
)
md_path.write_text(text)
Script quét qua tất cả file, thay thế hàng loạt theo bảng mapping (URL cũ → URL mới).
Thực nghiệm 800 ảnh tổng thời gian khoảng 45 phút: quét ảnh hỏng 18 phút, Wayback cứu ảnh 12 phút, upload dịch vụ mới 8 phút, thay thế và ghi lại file 7 phút.
Quay lại xử lý tay là không thể.
Bước 4: 4 Kịch Bản Platform Khác Nhau
Các platform dùng cú pháp ảnh khác nhau, script cần điều chỉnh tương ứng:
| Kịch bản | Cú pháp | Regex tương ứng |
|---|---|---|
| BBCode (Voz / phpBB / forum cũ) | [img]URL[/img] |
\[img\]URL\[/img\] |
| Markdown (Hugo / Jekyll / Hexo) |  |
!\[.*?\]\(URL\) |
| HTML / WordPress | <img src="URL"> |
<img\s+src=["\']URL["\'] |
| Link thuần / Discord embed | URL trực tiếp | So khớp chuỗi URL đầy đủ |
Forum Việt Nam như Voz dùng BBCode hoặc Markdown tùy subforum. WordPress phổ biến với blog cá nhân và thương mại điện tử nhỏ lẻ. Blogger (blogspot) là nền tảng cũ vẫn còn nhiều người dùng — ảnh nhúng trong bài có thể là HTML thẳng.
Với WordPress: dùng tính năng Search & Replace trong admin panel hoặc plugin "Better Search Replace" để thay URL trong database mà không cần viết script. Với Blogger: phải sửa thủ công trong HTML editor hoặc dùng script tải về XML export, thay URL rồi import lại.
Bước 5: Chọn Dịch Vụ Lưu Trữ Mới Nào?
Tiêu chí chọn: hỗ trợ upload ẩn danh, link vĩnh viễn (không hết hạn 6 tháng), có batch API.
Các dịch vụ thực nghiệm thấy ổn:
| Dịch vụ | API ẩn danh | Link vĩnh viễn | CDN | Phù hợp kịch bản di chuyển |
|---|---|---|---|---|
| lpic.cc | Có | Có (sau đăng ký) | Toàn cầu | Blog vừa và nhỏ, forum |
| Catbox | Có | Có | Không | Forum cá nhân, traffic thấp |
| ImgChest | Có | Có | Mỹ | Thay thế phong cách Imgur |
| Postimages | Có | Có (tùy chọn) | Châu Âu/Mỹ | Ổn định lâu năm |
Tránh: Imgur (học một lần đủ rồi), ImgBB (chính sách NSFW cũng đang thắt chặt).
Với người dùng Việt Nam thêm lưu ý: một số dịch vụ nước ngoài có thể chậm khi truy cập từ Việt Nam nếu không có CDN tại Đông Nam Á. Kiểm tra tốc độ thực tế trước khi dùng làm dịch vụ chính.
lpic.cc Cho Kịch Bản Di Chuyển Ảnh
lpic.cc có 3 điểm thiết kế phù hợp với việc di chuyển:
Upload ẩn danh qua API không cần đăng ký — script kết nối thẳng. URL của ảnh sau khi đăng ký tài khoản là vĩnh viễn, không bị xóa bất ngờ. Link direct thân thiện — không bắt redirect về app như Imgur — quan trọng với Voz, forum BBCode nơi "URL phải là địa chỉ file ảnh thật sự".
Giới hạn cần nói rõ: bản ẩn danh miễn phí tối đa 8 MB/file, 200 ảnh/ngày. Cần di chuyển 800 ảnh một lần thì phải chia 4 ngày, hoặc đăng ký tài khoản nâng giới hạn.
Thực nghiệm cho thấy: di chuyển trong 2–3 ngày là nhịp hợp lý. Di chuyển một lúc dễ gặp lỗi — một ảnh upload thất bại giữa chừng là bảng mapping sai hết.
Làm từ từ thôi.
FAQ Thường Gặp
Q1: Script quét ra "ảnh hỏng" — làm sao biết thật sự hỏng hay chỉ mạng tạm thời lỗi?
Chạy hai lần. Sau lần quét đầu, chờ 24 giờ rồi quét lại. Cả hai lần đều hỏng thì mới xác nhận là hỏng thật. Imgur đôi khi có CDN bị giật, quét một lần có thể nhầm. Thực nghiệm: quét hai lần giảm tỷ lệ nhầm từ 6% xuống 0.8%.
Q2: Ảnh Wayback cứu về có bị giảm chất lượng không?
Không giảm. Wayback lưu file ảnh gốc, chất lượng y như upload ban đầu. Nhưng đôi khi Wayback lưu phiên bản thumbnail thay vì ảnh gốc — lúc đó bạn chỉ nhận được ảnh 300×300 độ phân giải thấp. Script nên kiểm tra kích thước ảnh trả về; nếu quá nhỏ thì thử archive.today.
Q3: Ảnh Imgur cứu về upload lại còn bị ảnh hưởng bởi chính sách Imgur không?
Không. Ảnh tải về máy cục bộ xong thì độc lập với Imgur hoàn toàn. Upload lên dịch vụ mới là file mới hoàn toàn, chính sách của dịch vụ mới mới áp dụng. Lưu ý bản quyền — nếu ảnh gốc không phải do bạn chụp, upload lại cần tôn trọng giấy phép tác giả gốc, việc này không liên quan đến chính sách Imgur.
Q4: Script thay thế hàng loạt có vô tình làm hỏng nội dung bài viết không?
Có. Regex viết không chặt dễ bắn nhầm. Ba biện pháp bảo vệ: git commit trước khi thay thế (có thể rollback bất cứ lúc nào), ghi ra file mới rồi diff với file gốc trước khi ghi đè, lấy mẫu kiểm tra tay 10–20 bài không có vấn đề mới commit toàn bộ. Mình debug 3 ngày mới phát hiện một bài có chữ "imgur.com" trong nội dung văn xuôi bị thay nhầm thành link.
Q5: Không muốn code, có công cụ sẵn nào dùng được không?
WordPress có plugin "Wayback Machine Link Fixer" cài là dùng được. Hugo / Jekyll / Hexo không có công cụ sẵn, phải tự viết script. Discourse, phpBB có plugin bên thứ ba nhưng thường chỉ xử lý BBCode [img]. Mình đã tổng hợp script dùng trong bài này ở phần References — có thể tham khảo để sửa lại phù hợp với setup của bạn.
Q6: Tại Việt Nam, dùng Blogger hoặc WordPress.com miễn phí thay Imgur lưu ảnh có được không?
Về kỹ thuật được, nhưng không khuyến nghị làm dịch vụ lưu trữ ảnh chính. Blogger và WordPress.com có thể thay đổi chính sách hoặc xóa tài khoản inactive — rủi ro tương tự Imgur. Dịch vụ lưu trữ ảnh chuyên biệt như lpic.cc, Postimages có API rõ ràng và chính sách ổn định hơn cho use case này.