Skip to content

<search> - Search Element

Landmark HTML 2023

The <search> element represents a part of a document or application that contains search or filtering functionality. It provides a semantic way to identify search interfaces, making them more accessible to assistive technologies and improving the overall structure of your HTML.

Result
<search>
<!-- Search or filtering interface -->
</search>

The <search> element has no element-specific attributes.

This element supports all global attributes.

A simple search form in the header:

Result

A search interface with multiple filter options:

Result

A prominent site-wide search feature:

Result

Search functionality for filtering table data:

Result

Search interface with suggestion list:

Result

Product search with category navigation:

Result

A search interface without a traditional form submission:

Result

Understanding when to use <search>:

<!-- Good: Search functionality -->
<search>
<form action="/search">
<input type="search" name="q">
<button>Search</button>
</form>
</search>
<!-- Good: Filtering interface -->
<search>
<label>Filter by category:</label>
<select onchange="filterResults(this.value)">
<option>All</option>
<option>Category 1</option>
</select>
</search>
<!-- Wrong: Contact form (not search) -->
<search>
<form action="/contact">
<input type="text" name="name" placeholder="Your name">
<input type="email" name="email" placeholder="Email">
<button>Submit</button>
</form>
</search>
<!-- Correct: Use form directly -->
<form action="/contact">
<input type="text" name="name" placeholder="Your name">
<input type="email" name="email" placeholder="Email">
<button>Submit</button>
</form>

Provide clear labeling for accessibility:

<!-- Good: Visible label -->
<search>
<form action="/search">
<label for="site-search">Search the site:</label>
<input type="search" id="site-search" name="q">
<button>Search</button>
</form>
</search>
<!-- Good: aria-label when no visible label -->
<search>
<form action="/search">
<input type="search" name="q" aria-label="Search articles" placeholder="Search...">
<button aria-label="Submit search">🔍</button>
</form>
</search>

Use type="search" for search inputs:

<search>
<form action="/search">
<!-- Good: type="search" -->
<input type="search" name="q" placeholder="Search...">
<!-- Avoid: type="text" for search -->
<input type="text" name="q" placeholder="Search...">
</form>
</search>

Always provide a way to submit the search:

<!-- Good: Submit button -->
<search>
<form action="/search">
<input type="search" name="q">
<button type="submit">Search</button>
</form>
</search>
<!-- Also good: Icon button with label -->
<search>
<form action="/search">
<input type="search" name="q" aria-label="Search">
<button type="submit" aria-label="Submit search">🔍</button>
</form>
</search>

You can have multiple search elements on a page:

<!-- Site-wide search in header -->
<header>
<search aria-label="Site search">
<form action="/search">
<input type="search" name="q" aria-label="Search entire site">
<button>Search</button>
</form>
</search>
</header>
<!-- Local search within content -->
<main>
<section>
<h2>Products</h2>
<search aria-label="Product search">
<form action="/products/search">
<input type="search" name="q" aria-label="Search products">
<button>Filter</button>
</form>
</search>
</section>
</main>

The <search> element creates a search landmark that assistive technologies can identify:

<!-- Creates a search landmark -->
<search>
<form action="/search">
<input type="search" name="q" aria-label="Search">
<button>Search</button>
</form>
</search>

Screen reader users can navigate directly to search landmarks using keyboard shortcuts.

When you have multiple search elements, label them distinctly:

<search aria-label="Main site search">
<!-- Primary search -->
</search>
<search aria-label="Product filters">
<!-- Product filtering -->
</search>

Ensure all search controls are keyboard accessible:

<search>
<form action="/search">
<!-- All these elements are focusable and keyboard-accessible -->
<input type="search" name="q">
<select name="category">
<option>All</option>
</select>
<button type="submit">Search</button>
</form>
</search>
BrowserVersion
Chrome118+
Firefox118+
Safari17+
Edge118+
IENot supported

For older browsers, you can add ARIA to provide similar functionality:

<!-- Modern browsers -->
<search>
<form action="/search">
<input type="search" name="q">
<button>Search</button>
</form>
</search>
<!-- Fallback for older browsers -->
<div role="search">
<form action="/search">
<input type="search" name="q">
<button>Search</button>
</form>
</div>
<!-- Wrong: Login form in search element -->
<search>
<form action="/login">
<input type="email" name="email">
<input type="password" name="password">
<button>Log In</button>
</form>
</search>
<!-- Correct: Use form directly -->
<form action="/login">
<input type="email" name="email">
<input type="password" name="password">
<button>Log In</button>
</form>
<!-- Incomplete: Input without form -->
<search>
<input type="search" name="q">
<button>Search</button>
</search>
<!-- Better: Wrap in form -->
<search>
<form action="/search">
<input type="search" name="q">
<button type="submit">Search</button>
</form>
</search>
<!-- Wrong: No label -->
<search>
<form action="/search">
<input type="search" name="q">
<button>Go</button>
</form>
</search>
<!-- Correct: Add label -->
<search>
<form action="/search">
<input type="search" name="q" aria-label="Search the site">
<button>Search</button>
</form>
</search>