# Bad value “” for attribute “type” on element “a”: Expected a MIME type but saw the empty string.

> Canonical HTML version: https://rocketvalidator.com/html-validation/bad-value-for-attribute-type-on-element-a-expected-a-mime-type-but-saw-the-empty-string
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

The `type` attribute on an anchor (`<a>`) element is an advisory hint that tells the browser what kind of content to expect at the link destination. According to the WHATWG HTML specification, when present, this attribute must contain a valid MIME type string. An empty string (`""`) is not a valid MIME type, so the W3C validator flags it as an error.

This issue commonly appears when a CMS, templating engine, or JavaScript framework generates the `type` attribute dynamically but produces an empty value when no MIME type is available. It can also happen when developers add the attribute as a placeholder intending to fill it in later.

### Why this matters

While browsers generally handle an empty `type` attribute gracefully by ignoring it, there are good reasons to fix this:

- **Standards compliance** — An empty string violates the HTML specification's requirement for a valid MIME type, making your document invalid.
- **Accessibility** — Assistive technologies may use the `type` attribute to communicate the linked resource's format to users. An empty value provides no useful information and could lead to unexpected behavior in some screen readers.
- **Predictable behavior** — Browsers are allowed to use the `type` hint to influence how they handle a link (e.g., suggesting a download or choosing a handler). An empty value makes the intent ambiguous.

### How to fix it

You have two straightforward options:

1. **Remove the `type` attribute** — If you don't need to specify the MIME type, simply omit the attribute. This is the preferred approach when the type is unknown or unnecessary.
2. **Provide a valid MIME type** — If you want to hint at the linked resource's format, supply a proper MIME type string like `application/pdf`, `text/html`, `image/png`, `application/zip`, etc.

The `type` attribute is purely advisory — the browser does not enforce it or refuse to follow the link if the actual content type differs. So omitting it is always safe.

## Examples

### Incorrect — empty `type` attribute

```html
<a href="report.pdf" type="">Download Report</a>
```

This triggers the validation error because `""` is not a valid MIME type.

### Correct — attribute removed

```html
<a href="report.pdf">Download Report</a>
```

Removing the `type` attribute entirely is the simplest fix and works perfectly when the MIME type hint isn't needed.

### Correct — valid MIME type provided

```html
<a href="report.pdf" type="application/pdf">Download Report</a>
```

If you want to explicitly indicate the format of the linked resource, use a proper MIME type value.

### Multiple links with correct `type` usage

```html
<ul>
  <li><a href="slides.pptx" type="application/vnd.openxmlformats-officedocument.presentationml.presentation">Slides (PPTX)</a></li>
  <li><a href="data.csv" type="text/csv">Data (CSV)</a></li>
  <li><a href="https://example.com/about">About Us</a></li>
</ul>
```

In this example, the first two links include `type` attributes with valid MIME types to hint at the file format. The third link, pointing to a regular webpage, omits `type` entirely since it's not needed.

### Fixing dynamically generated attributes

If your template engine produces empty `type` attributes, add a conditional check:

```html
<!-- Instead of always outputting type="" -->
<!-- Only include the attribute when a value exists -->
<a href="report.pdf" type="application/pdf">Download Report</a>
```

In template logic, ensure you only render the `type` attribute when a non-empty MIME type value is available. Otherwise, omit the attribute from the output altogether.
