# Bad value X for attribute “href” on element “a”: Invalid host: Illegal character in domain: space is not allowed.

> Canonical HTML version: https://rocketvalidator.com/html-validation/bad-value-x-for-attribute-href-on-element-a-invalid-host-illegal-character-in-domain-space-is-not-allowed
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

A URL is made up of several parts: scheme, host (domain), path, query, and fragment. While some of these parts allow certain special characters (often percent-encoded), the **host** portion has strict rules. Domain names follow the DNS naming conventions, which only permit ASCII letters (`a-z`, `A-Z`), digits (`0-9`), hyphens (`-`), and dots (`.`) as label separators. Spaces are categorically forbidden.

This validation error typically occurs in two scenarios:

1. **A literal space** appears in the domain, e.g., `http://my domain.com`. This is often a typo or a copy-paste error.
2. **A percent-encoded space** (`%20`) appears in the domain, e.g., `http://my%20domain.com`. While `%20` is valid in URL paths and query strings, it is not valid in the host portion. Percent-encoding does not make a space legal in a domain name — it still resolves to a space character, which DNS cannot handle.

### Why this is a problem

- **Broken links:** Browsers cannot resolve a domain with spaces to an actual server. Users clicking the link will get an error or be taken nowhere.
- **Accessibility:** Screen readers and assistive technologies may announce the link, but users will encounter a dead end, creating a frustrating experience.
- **Standards compliance:** The [WHATWG URL Standard](https://url.spec.whatwg.org/) explicitly forbids spaces in the host component. The W3C validator flags this to help you catch what is almost certainly a mistake.
- **SEO impact:** Search engine crawlers will treat the URL as invalid and will not follow or index it.

### How to fix it

- **Check for typos:** The most common fix is to correct the domain to the actual, valid domain name you intended.
- **Replace spaces with hyphens:** If the intended domain genuinely has a word separator, the standard convention is to use hyphens (e.g., `my-domain.com`).
- **Remove spaces entirely:** Sometimes spaces are accidentally introduced and simply need to be removed (e.g., `mydomain.com`).
- **Check the path vs. host:** If the space belongs in a file path or query parameter rather than the domain, make sure it's in the correct part of the URL and properly percent-encoded there.

## Examples

### ❌ Literal space in the domain

```html
<a href="http://my domain.com/page">Visit site</a>
```

### ❌ Percent-encoded space in the domain

```html
<a href="http://my%20domain.com/page">Visit site</a>
```

### ✅ Fixed: use a hyphen in the domain

```html
<a href="http://my-domain.com/page">Visit site</a>
```

### ✅ Fixed: remove the space entirely

```html
<a href="http://mydomain.com/page">Visit site</a>
```

### ✅ Spaces are fine in the path (percent-encoded)

Note that `%20` is valid in the **path** portion of a URL — just not in the domain:

```html
<a href="http://mydomain.com/my%20page">Visit page</a>
```

### Common mistake: space before or after the domain

Sometimes the space is hard to spot because it's at the beginning or end of the URL, or between the scheme and domain:

```html
<!-- ❌ Trailing space in domain -->
<a href="http://mydomain.com /page">Visit site</a>

<!-- ✅ Fixed -->
<a href="http://mydomain.com/page">Visit site</a>
```

If your URLs are generated dynamically (e.g., from a CMS or database), make sure to trim whitespace from the domain portion before constructing the full URL. A quick way to catch these issues during development is to validate your HTML regularly with the [W3C Markup Validation Service](https://validator.w3.org/).
