# Block or Allow URLs in Safari

> Control which websites your users can visit in Safari on supervised iOS and iPadOS devices, using allowed and denied URL lists.

Source: https://docs.applivery.com/en/device-management/apple/ios-ipados/policies/web-content-filter/  •  Last updated: 2026-08-08

---

Sometimes you need to decide, centrally, which websites a Device can reach — a shared iPad in a shop that should only open two internal tools, or a fleet where a handful of sites simply shouldn't be reachable. The **Web Content Filter** configuration is where you do that.

It gives you two lists: sites you always allow, and sites you always block. Behind them, the matching rules are less literal than they look, and that's where most surprises come from.

## Prerequisites

-   The Device is **supervised**. System-level web content filtering on iOS and iPadOS, Safari included, only works on supervised Devices.
    
-   The Policy is correctly assigned to the target Device(s).
    

## Configuration

**Navigate to Policies**

Once in the [**Applivery Dashboard**](https://dashboard.applivery.io), go to the **Policy** 1 you want to modify. From the left side menu, select **\+ Add configuration** and choose **Web Content Filter** 2.

![web content filter](https://docs.applivery.com/int/_r2/media/09ac0a4e-3ad8-478f-9f15-3474973eec71/6665d3bf-dc52-45af-942d-27b27858c74b.png)

**Fill in the lists**

Add the sites you want to block to the denied list, the ones you always want reachable to the permitted list, or both.

Once applied, a Device that tries to open a blocked site doesn't fail silently — Safari shows a **Website Blocked** message.

### What you can set

<table style="min-width: 50px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p>Setting</p></th><th colspan="1" rowspan="1"><p>What it does</p></th></tr><tr><td colspan="1" rowspan="1"><p><strong>Automatic filtering</strong></p></td><td colspan="1" rowspan="1"><p>Apple's built-in filter, which blocks adult content automatically. <strong>Required if you want to use the permitted list.</strong></p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Permitted URLs</strong></p></td><td colspan="1" rowspan="1"><p>Sites allowed even if the automatic filter would treat them as adult content. Leave it empty and every non-adult site is reachable except those you denied.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Denied URLs</strong></p></td><td colspan="1" rowspan="1"><p>Sites that are never reachable, even if the automatic filter considers them fine. Keep this list to <strong>no more than 500 URLs</strong>.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Hide denied URLs</strong></p></td><td colspan="1" rowspan="1"><p>From iOS 18, hides the denied list from the profile shown in <strong>Settings → General → VPN &amp; Device Management</strong>.</p></td></tr><tr><td colspan="1" rowspan="1"><p><strong>Plug-in</strong></p></td><td colspan="1" rowspan="1"><p>Hands filtering to a third-party filter instead of Apple's built-in one.</p></td></tr></tbody></table>

:::info
**The permitted list only works with automatic filtering turned on.** Apple ties the two together: if automatic filtering is off, permitted URLs have nothing to make an exception to, and the list does nothing.
:::
:::info
`*.apple.com` **and** `*.icloud.com` **are always reachable**, whether or not you list them. Don't spend time trying to block them.
:::

## How URLs are matched

This is the part worth reading twice, because the filter doesn't compare URLs the way you'd expect.

**Include the scheme.** Entries need `https://` or `http://`. If a site answers on both, add an entry for each.

**Matching is by substring.** A URL matches an entry if the exact characters of that entry appear anywhere inside the requested URL. Blocking `example.com/a` therefore also blocks `example.com/apple`, `example.com/about` and `example.com/a/b`.

:::warning
**The** `www` **prefix is discarded before matching, and the consequences are wider than they look.** Blocking `www.example.com` leaves `example.com` as the pattern — which then matches `m.example.com` as well.

So a rule you wrote for one hostname can quietly cover mobile subdomains and anything else containing that string. Check what else your entry catches before rolling it out.
:::

**A subdomain doesn't cover the main domain.** Blocking `blog.example.com` leaves `example.com` reachable. If you want both, add both.

**Trailing slashes are matched explicitly.** An entry ending in `/`, such as `example.com/a/`, covers `example.com/a` and `example.com/a/b`.

**Redirects aren't followed.** If a blocked URL redirects somewhere else, the destination has to be on the list too — otherwise the redirect goes through.

### Examples

<table style="min-width: 75px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p>Goal</p></th><th colspan="1" rowspan="1"><p>Entry</p></th><th colspan="1" rowspan="1"><p>Result</p></th></tr><tr><td colspan="1" rowspan="1"><p>Block a whole domain, subpaths included</p></td><td colspan="1" rowspan="1"><p><code>https://example.com/</code></p></td><td colspan="1" rowspan="1"><p>Blocks <code>example.com</code> and everything under it</p></td></tr><tr><td colspan="1" rowspan="1"><p>Block one path prefix</p></td><td colspan="1" rowspan="1"><p><code>https://example.com/a</code></p></td><td colspan="1" rowspan="1"><p>Blocks <code>example.com/a</code>, <code>example.com/apple</code>, <code>example.com/a/b</code> — but not the main domain</p></td></tr><tr><td colspan="1" rowspan="1"><p>Block a path explicitly</p></td><td colspan="1" rowspan="1"><p><code>https://example.com/a/</code></p></td><td colspan="1" rowspan="1"><p>Blocks <code>example.com/a</code> and <code>example.com/a/b</code></p></td></tr><tr><td colspan="1" rowspan="1"><p>Allow only a specific set of sites</p></td><td colspan="1" rowspan="1"><p>Automatic filtering on + the sites in the permitted list</p></td><td colspan="1" rowspan="1"><p>Those sites are always reachable</p></td></tr></tbody></table>

## When several policies apply

Every filtering rule is active at the same time, and a site has to **pass all of them** to be reachable. In practice that means the restrictions add up rather than override each other: if any applied Policy denies a site, it's denied.

If a site you expect to work is blocked, check **every** Policy assigned to the Device, not just the one you edited.

## Important considerations

-   **A blocked website is still reachable through its app.** If a social network is on the denied list but its app is installed, the user carries on as normal — the filter only covers web traffic. To close that gap, block the app too, as described in [Block and Allow Apps](https://docs.applivery.com/en/device-management/apple/app-management/block-allow-apps/).
    
-   **The filter covers Safari and WebKit.** Third-party browsers that don't use WebKit, and traffic generated by apps, fall outside it. For those, you need a plug-in filter or a network-level control such as a global HTTP proxy or filtered DNS.
    
-   **Enabling the filter disables clearing Safari history.** This is a documented Apple side effect, not a bug. From iOS 26 there's an explicit setting for it, which also blocks private browsing, since private mode keeps no history to retain.
    
-   **Users can't change any of this on the Device** while the profile is installed.
    
-   **This isn't a compliance-grade filter.** For strict regulatory requirements, or coverage beyond Safari, combine it with a global HTTP proxy, filtered DNS, or a third-party filter through the plug-in option.
    

## Unsupervised and personal Devices

The built-in filter needs supervision, so it isn't available on unsupervised or user-enrolled Devices. The route there is the **plug-in** option with a third-party filter, which requires a **content filter UUID** — Apple makes that identifier mandatory precisely for unsupervised Devices and User Enrollment, from iOS 16 onwards. Managed apps carrying the same UUID share the filter.

## Troubleshooting

<table style="min-width: 75px;"><colgroup><col style="min-width: 25px;"><col style="min-width: 25px;"><col style="min-width: 25px;"></colgroup><tbody><tr><th colspan="1" rowspan="1"><p>Symptom</p></th><th colspan="1" rowspan="1"><p>Likely cause</p></th><th colspan="1" rowspan="1"><p>What to check</p></th></tr><tr><td colspan="1" rowspan="1"><p>A blocked URL is still reachable</p></td><td colspan="1" rowspan="1"><p>The user is going through the native app, or a redirect lands on a URL that isn't listed</p></td><td colspan="1" rowspan="1"><p>Block the app as well; add the redirect destination to the list</p></td></tr><tr><td colspan="1" rowspan="1"><p>The profile doesn't install</p></td><td colspan="1" rowspan="1"><p>The Device isn't supervised, or a plug-in filter is missing its identifiers</p></td><td colspan="1" rowspan="1"><p>Confirm supervision; check the content filter UUID</p></td></tr><tr><td colspan="1" rowspan="1"><p>A permitted site is still blocked</p></td><td colspan="1" rowspan="1"><p>A contradicting entry exists in a denied list — possibly in a different Policy</p></td><td colspan="1" rowspan="1"><p>Review every Policy applied to the Device; denied entries win</p></td></tr><tr><td colspan="1" rowspan="1"><p>The permitted list has no effect</p></td><td colspan="1" rowspan="1"><p>Automatic filtering is off</p></td><td colspan="1" rowspan="1"><p>Turn automatic filtering on; the permitted list depends on it</p></td></tr><tr><td colspan="1" rowspan="1"><p>Filtering doesn't cover other browsers or app traffic</p></td><td colspan="1" rowspan="1"><p>Expected — the built-in filter covers Safari and WebKit</p></td><td colspan="1" rowspan="1"><p>Consider a plug-in filter or a global HTTP proxy</p></td></tr></tbody></table>
