Skip to main content
HTML Validation

Stray start tag “style”.

About This HTML Issue

The “Stray start tag style“ error occurs when the HTML parser encounters a <style> element somewhere it doesn’t belong according to the HTML specification. The most common causes are:

  • A <style> element placed after the closing </body> tag or after the closing </html> tag.
  • A <style> element accidentally placed inside an element like <p>, <span>, or <a> that only accepts phrasing content and not <style> in that context.
  • A <style> element appearing in the <body> without being a valid child in that context (though the HTML living standard does allow <style> in the <body> in certain conditions).

According to the WHATWG HTML living standard, the <style> element is primarily expected inside the <head> section. While the spec does technically allow <style> in the <body> where metadata content is expected (such as within a <noscript> element that is a child of <head>), placing it in the <head> is the most reliable and universally valid approach.

When a <style> tag appears after </body> or </html>, the browser’s error-recovery behavior kicks in. Browsers will still try to apply the styles, but you’re relying on undefined recovery behavior rather than the specification. This can lead to inconsistent rendering, makes the document harder to maintain, and signals structural problems in your HTML.

This issue commonly arises when content management systems, JavaScript frameworks, or copy-paste mistakes inject styles at the end of a document. It can also happen when template includes or server-side rendering place <style> blocks in unexpected locations.

To fix this issue, move the <style> element into the <head> section. Alternatively, consider moving the CSS into an external stylesheet linked via a <link> element, which is generally the preferred approach for maintainability and caching.

Examples

Incorrect: <style> after the closing </body> tag

This is the most common scenario that triggers the error. The <style> element is “stray” because it appears outside the <body> and <head>:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p>Hello world</p>
  </body>
  <style>
    p {
      color: green;
    }
  </style>
</html>

Incorrect: <style> after the closing </html> tag

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My Page</title>
  </head>
  <body>
    <p>Hello world</p>
  </body>
</html>
<style>
  p {
    color: green;
  }
</style>

Incorrect: <style> nested inside a <p> element

The <p> element only accepts phrasing content, so a <style> element here may trigger the stray tag error:

<p>
  <style>
    .highlight { color: red; }
  </style>
  Some highlighted text.
</p>

Correct: <style> inside the <head>

Move all <style> elements into the <head> section:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My Page</title>
    <style>
      p {
        color: green;
      }
      .highlight {
        color: red;
      }
    </style>
  </head>
  <body>
    <p>Hello world</p>
    <p class="highlight">Important text.</p>
  </body>
</html>

Correct: using an external stylesheet instead

For better separation of concerns, caching, and maintainability, use an external stylesheet:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My Page</title>
    <link rel="stylesheet" href="styles.css">
  </head>
  <body>
    <p>Hello world</p>
  </body>
</html>

If you have multiple <style> blocks scattered throughout your document, consolidate them all into a single <style> element in the <head>, or better yet, move them into an external .css file. This ensures valid HTML, predictable rendering across browsers, and cleaner document structure.

Find issues like this automatically

Rocket Validator scans thousands of pages in seconds, detecting HTML issues across your entire site.

Help us improve our guides

Was this guide helpful?

Ready to validate your sites?
Start your free trial today.