Each one ships with a VergeCloud default. You can keep that, upload your own HTML, or point it to a URL.
Go to Panel → Custom Page. For each page type you'll see three options: default, upload HTML, or redirect.
| Variable | What it shows |
|---|---|
%IP% | The visitor's IP address |
%SID% | The server ID that handled the request |
%DOMAIN% | The domain that was requested |
%ERRCODE% | The error code shown to the visitor |
%TIME% | Timestamp in YYYY-MM-dd HH:mm:ss Z |
%REQUEST_ID% | Unique ID for the request |
%CHALLENGE% | Renders the DDoS challenge itself, required on challenge pages |
Showing the request ID and timestamp on the page means if someone emails support about it, you can look it up in your logs right away instead of going back and forth asking what they saw.
Heads up, turning this on with upload or redirect puts your whole domain into maintenance mode, not just one page.
These show up when JS or CAPTCHA verification kicks in. Don't forget %CHALLENGE% in your HTML, it's what actually loads the challenge. Leave it out and the page shows up fine, but nothing happens when someone tries to get past it.
Secure link protection means a path only works with a valid generated link, scoped by IP and time. VergeCloud splits the failure into two cases: the link expired, or the link is invalid/tampered with.
Same idea as the firewall page above, but this one fires specifically when the WAF catches something, not a general firewall rule. They're configured separately, so you can message them differently if you want.
Shows up when someone exceeds your configured request limits. A flat 429 reads as broken, even though it's working as intended, so a quick explanation goes a long way here. This also catches normal users sometimes, usually on a shared office connection or VPN where lots of people share one IP.
Check that every image, font, or script your page references is actually reachable publicly. Anything sitting behind a login or blocked by your own firewall rules won't load, and you'll find out the hard way when the error page itself looks broken.
If you have geo-blocking or IP restrictions running at the domain level, carve out an exception for whatever paths your custom pages pull assets from.
Test by triggering the real condition rather than just opening the file locally. Visit a path that doesn't exist to check your 404, flip on maintenance mode briefly to check that page, and so on. Opening the HTML in a browser tells you nothing about whether the variables are actually populating.