Part 1Build objective
Create a utility-first page at:
/reddit-shadowban-checker/
Use the site’s existing:
- Header, footer and navigation
- Page-width containers and spacing scale
- Typography and heading styles
- Form, button, alert, table and icon components
- Color tokens, border radii and shadows
- Dark-mode behavior, if supported
- Analytics and consent implementation
Do not introduce a separate visual theme for this page.
Use the supplied written page as the source of truth for headings and prose. Do not replace its headings with wording from this guide. Match sections by their meaning and order.
Part 2Page structure
Build the page in this order:
Existing site header
Main
Checker hero
H1
One-line introduction
Checker form
Dynamic results
Static result legend
Checker methodology/supporting copy
Shadowban explanation
Definition
Signs list
Status comparison table
“Visible account but hidden posts” explanation
Manual confirmation
Three numbered check methods
Partial-shadowban note
Recovery and next steps
Appeal steps
Duration
Recovery likelihood
Starting over
Linked/alternate accounts
Causes and prevention
Common causes list
Prevention list
About the tool
Trust/privacy statement
Two inline closing links
Existing site footer
Use one H1 only. Major sections are H2s; question-level subsections and individual manual checks are H3s. Do not place substantive copy in accordions or tabs—the full explanation should remain visible and server-rendered.
Recommended stable anchors:
#checker#what-a-shadowban-means#confirm-the-result#appeal#causes#about-the-tool
The “run another check” link should point to #checker.
Part 3Checker hero
Layout
Keep the hero compact so the form is visible above the fold on common desktop and mobile screens. Do not add an illustration, promotional banner, product cards or a large breadcrumb treatment above it.
Use this order:
- H1
- Introductory sentence
- Checker card
- Dynamic result panel
- Persistent result legend
- The supplied paragraphs explaining who can be checked and how the check works
The checker card should be centered and approximately 720–800px wide. Supporting copy may use the normal article width.
Form
Use a visible label and a multiline textarea so users can enter one username or several usernames, one per line.
Required controls:
- Label: use the supplied form label, or “Reddit username(s)” if none is provided
- Textarea
- Short helper text explaining one username per line
- Primary Check button
- Inline validation/error area
Do not request:
- Reddit login details
- Reddit access tokens
- Email addresses
- Payment details
- Marketing consent
The button should use the supplied CTA wording. If no CTA is supplied, use “Check username” for one entry and “Check usernames” for multiple entries.
Input handling
On submission:
- Split entries by line.
- Trim whitespace.
- Accept and normalize:
usernameu/username/u/username@username- A full
reddit.com/user/usernameorreddit.com/u/usernameURL
- Deduplicate usernames case-insensitively.
- Validate against Reddit username syntax.
- Escape all displayed values.
- Check no more than 10 unique usernames in one submission.
Show clear validation for blank, malformed or excessive input. Do not place usernames in the page URL, query string, analytics payload or browser history.
Ordinary Enter should add a new line. Support Ctrl/Cmd + Enter to submit.
Loading behavior
While checking:
- Keep the submitted usernames visible
- Disable duplicate submission
- Show a spinner and “Checking…” state
- For a batch, show progress such as “Checking 2 of 5”
- Do not hide the static legend or the rest of the page
After completion, move keyboard focus to a result-summary heading without scrolling the heading under a sticky site header.
Part 4Results panel
Insert results between the form and the static legend. Show one result card or row per username, in input order.
Each result must contain:
- Normalized username in the form
u/username - Status icon
- Written status label
- Full-sentence explanation
- Recent-post visibility line when reliable data exists
- UTC timestamp
- Link to the public Reddit profile
Use a timestamp format that is clear in screenshots:
Checked 12 Jun 2025, 14:32 UTC
The four semantic statuses are:
Visible
- Green success treatment
- Label: “Visible”
- Explain that the public profile loads
- State whether recent posts were publicly visible, if tested
Shadowbanned
- Red danger treatment
- Label: “Shadowbanned” or the supplied equivalent
- Explain that the public profile is unavailable while the account is otherwise known to remain active
- Use “appears to be shadowbanned” where the backend reports a likely rather than confirmed result
Suspended
- Amber warning treatment
- Label: “Suspended”
- Explain that Reddit displays a suspension state and that this is not a shadowban
Not found
- Neutral treatment
- Label: “Not found”
- Explain that the username may be misspelled, deleted or never registered
Icons and written labels are required; do not communicate status through color alone.
Operational failures
Network failures, rate limiting, timeouts and malformed upstream responses are not account statuses. Show a separate error state:
- “This account could not be checked right now.”
- Include a Retry control
- Do not map errors or HTTP 429/5xx responses to “Shadowbanned” or “Not found”
For a mixed batch, preserve successful results and show errors only for affected usernames.
Recent-post visibility
Use one of these supporting values:
- Recent posts are publicly visible
- Recent posts appear to be hidden
- No recent posts were available to test
- Recent post visibility could not be tested
Do not infer that posts are hidden merely because the public account has no recent submissions. Only report hidden posts when the checker has a reliable comparison signal.
If the profile is visible but reliable evidence says recent submissions are hidden, keep the primary state as Visible and add a prominent warning line. The written page’s partial-shadowban explanation provides the context.
Part 5Checker backend
Use the site’s existing account-health or fulfillment checker as the first-choice data source. The page states that it uses the same check the business applies before account delivery, so both workflows must call the same underlying service or shared library.
Expose it through a server-side route following the project’s existing API conventions. A suitable logical contract is:
POST /api/reddit-shadowban-check
{
"usernames": ["example_user", "second_user"]
}
{
"checkedAt": "2025-06-12T14:32:00Z",
"results": [
{
"username": "example_user",
"status": "visible",
"confidence": "confirmed",
"profileVisible": true,
"recentPostsVisibility": "visible",
"profileUrl": "https://www.reddit.com/user/example_user/"
}
]
}
Allowed status values:
visible
shadowbanned
suspended
not_found
error
Allowed post-visibility values:
visible
hidden
none
unknown
Detection safeguards
Status precedence should be:
- Explicit suspension signal → Suspended
- Valid public profile → Visible
- Public profile absent while a separate reliable signal confirms the account still exists and remains usable → Shadowbanned
- No reliable existence signal → Not found
A bare profile 404 is not, by itself, enough to prove a shadowban because Reddit can return an unavailable profile for deleted or nonexistent accounts. Do not present a definite shadowban verdict from an ambiguous 404.
If the existing checker returns confidence, preserve it. Use “appears to be” for likely results and unqualified wording only for confirmed results.
All Reddit credentials, service tokens and implementation details must remain server-side. “No token required” means the visitor does not provide one; it does not prevent the server from using the site’s own approved credentials.
Set a reasonable upstream timeout, retry a rate-limited request only when the upstream response permits it, and keep batch concurrency low. Follow Reddit’s current API terms and use the site’s identifying server user agent.
Return Cache-Control: no-store for checker responses.
Part 6Static result legend
Keep the four-state legend visible before and after a check. This is indexable explanatory content, not a replacement for dynamic results.
Build it as four compact rows containing:
- Status icon
- Status name
- One complete explanatory sentence
On desktop it may be a four-column strip or stacked rows. On mobile it must become a single column. Do not truncate the explanations.
Part 7Explanatory content components
Shadowban definition and signs
Render the definition as a short paragraph followed by the supplied signs as a standard bulleted list. Keep the closing qualification about low engagement visually attached to the list.
Status comparison
Use a semantic HTML table.
Columns:
- Row heading
- Shadowban
- Suspension
- Subreddit ban
- Removed or filtered post
Rows:
- Notice received
- Logged-out profile behavior
- Who applied it
- Where to appeal or resolve it
Use <th scope="col"> and <th scope="row">. On narrow screens, place the table in a horizontally scrollable region with an accessible label. Keep the first column visible if the site’s table component supports sticky row headings.
Do not create separate desktop and mobile copies of the table.
Manual checks
Render the three manual confirmation methods as numbered step blocks. Each block should have:
- Number
- H3
- Two to four short ordered steps
- A final “how to read the result” sentence
- Relevant Reddit link
Use these destinations where the written copy refers to them:
- Profile:
https://www.reddit.com/user/{username}/ - Appeals:
https://www.reddit.com/appeals - ShadowBan community:
https://www.reddit.com/r/ShadowBan/
After a successful check, the profile link may use the first checked username. Before a check, display the URL pattern as text rather than linking to a placeholder account.
Follow the site’s normal external-link behavior and include rel="noopener noreferrer" when opening a new tab.
Appeal and recovery section
Use the supplied appeal instructions as a true ordered list. Keep duration, likelihood, starting-over and linked-account content as separate H3 subsections or clearly separated paragraphs according to the written page.
Do not add:
- Antidetect browser recommendations
- Proxy tutorials
- Fingerprint configuration
- Detailed ban-evasion workflows
- Additional warm-up protocols
- Contributor Quality Score material
Causes and prevention
Use two H3s followed by two bulleted lists. They may sit in two columns above approximately 900px and must stack on smaller screens.
Do not turn this section into cards with product promotion.
Part 8Commercial links
The page must not look like a sales page.
The established-account offer appears only:
- As an inline text link in the supplied fallback/start-over paragraph
- In the final closing line in the About section
Link to the site’s existing canonical established Reddit accounts collection or product page. Reuse the live route already present on the site; do not create a duplicate product route.
Do not add:
- Product grids
- Prices
- “Buy now” buttons
- Sticky sales CTAs
- Promotional banners
- Exit-intent modals
- Testimonials inside this page
The final “run another check” link should be visually equal to the product link, not subordinate to a large sales button.
Part 9Privacy and security
The page claims the checker stores nothing about the username or person checking. Implement accordingly:
- Use POST, not query parameters
- Do not persist submitted usernames
- Do not include usernames in application logs or error traces
- Mask the textarea in session-replay tools
- Do not send field values to analytics
- Do not retain result histories in local storage
- Do not add accounts to recent-search lists
- Use only transient, non-persistent abuse controls if required
- Sanitize and encode usernames before rendering or constructing URLs
No email capture, login wall or CAPTCHA should appear during normal use. Existing edge-level abuse protection may be used if the endpoint is attacked.
Part 10Accessibility and responsive behavior
Meet WCAG 2.2 AA standards.
Required behavior:
- Visible form label
- Associated helper and error text
- Keyboard-operable submission and retry controls
aria-busy="true"while the checker is running- A polite
aria-liveregion for progress - Result summary receives focus after completion
- Status icons marked decorative when the written label provides the meaning
- Minimum 44px touch targets
- Sufficient contrast for all status treatments
- No horizontal page overflow
- Table scroll region is keyboard accessible
- Reduced-motion preference respected
On mobile:
- Stack textarea and button
- Show one result card per username
- Keep full explanations and timestamps visible
- Stack cause/prevention lists
- Avoid oversized top spacing that pushes the checker below the fold
Include a small <noscript> message stating that JavaScript is required to run the checker while leaving the written guide readable.
Part 11SEO and metadata
All written explanatory content and the static legend must be server-rendered. Only submitted results should be client-rendered.
Use the writer-supplied SEO title and H1. If no separate metadata is supplied, use:
- Title:
Reddit Shadowban Checker: Free Instant Test for Any Username - Meta description:
Check whether any Reddit username is visible, suspended, not found or likely shadowbanned. Free Reddit shadowban test with no login required. - Canonical: the absolute canonical URL for
/reddit-shadowban-checker/
Add normal Open Graph and social metadata using the site’s existing implementation.
Add WebApplication structured data:
- Name from the page title
- Application category:
UtilityApplication - Operating system:
Web - Current canonical URL
isAccessibleForFree: true- Offer price
0inUSD
Do not add review ratings or claims unsupported by the page. Do not add FAQ schema unless the final written page contains a discrete, visible FAQ section in question-and-answer form.
Dynamic username checks must not generate indexable URLs or separate result pages.
Part 12Analytics
Use the existing analytics provider only. Track:
- Checker submitted
- Checker completed
- Retry used
- Appeal link clicked
- Established-accounts link clicked
- Run-another-check link clicked
Permitted event properties:
- Number of usernames
- Completion time
- Aggregate count by status
- Whether the batch contained an error
Never send usernames, profile URLs, entered text or other identifying values.
Part 13Acceptance checks
Before publishing, verify:
- The checker is usable without login, email or a user-supplied token.
- Single and multiline username checks work.
u/name,@nameand Reddit profile URLs normalize correctly.- Duplicate usernames are checked once.
- Visible, suspended, shadowbanned and not-found fixtures render distinct results.
- A bare 404 is not falsely presented as a confirmed shadowban.
- Timeouts, 429s and 5xx responses produce Retry errors rather than account verdicts.
- Mixed batches preserve successful results.
- Every result includes a complete sentence and UTC timestamp.
- No username appears in URLs, analytics, storage or logs.
- The static four-state legend is present before running the tool.
- The comparison table remains usable on mobile.
- The three manual-check links work.
- The appeal link points to Reddit’s current appeal page.
- Product links are inline only and use the existing canonical product route.
- There is one H1 and a logical H2/H3 hierarchy.
- Static content is present without JavaScript.
- Keyboard, screen-reader and mobile tests pass.
- Metadata, canonical and structured data validate.
- No additional sales modules, evasion tutorials or unrelated account-management content have been added.