Prompt

How do I ensure my job discovery workflow with a job search widget is compliant with accessibility and SEO requirements?

Latest observation

Jul 26, 2026 · OpenAI APIWeb search: off

To make a job discovery workflow with a job search widget compliant with both accessibility and SEO, design it so that:

  1. All job content is crawlable and indexable
  2. The search/filter experience is fully usable without a mouse
  3. Key information is available in static, semantic HTML
  4. Dynamic updates are announced correctly to assistive tech
  5. You follow structured data and metadata best practices

Here’s a practical checklist.


1) Make sure jobs are indexable by search engines

Use server-rendered, crawlable job pages

  • Each job should have its own dedicated URL.
  • Job details should be available in the initial HTML or server-rendered output, not only after JavaScript runs.
  • Avoid hiding core job content behind client-only interactions.

Give each job a unique, stable URL

Example:

  • /jobs/software-engineer-123
  • Not just a modal or query-string-only page like /jobs?selected=123

Include indexable job listings pages

  • Category, location, and search results pages should be accessible with meaningful URLs.
  • If filters are applied, ensure URLs can represent them where appropriate.

Use structured data

Add JobPosting schema to job detail pages.

Include at least:

  • title
  • description
  • datePosted
  • validThrough
  • hiringOrganization
  • jobLocation or jobLocationType for remote roles
  • employmentType
  • applicantLocationRequirements if relevant

This helps search engines understand and surface your listings.

Provide XML sitemaps

  • Add job URLs to your sitemap.
  • Update it frequently as jobs are added, changed, or removed.
  • Remove expired jobs or mark them appropriately.

Handle expired jobs properly

  • If a job is no longer open:
    • Keep the page if useful for users, but indicate it’s closed, or
    • Return a suitable status or redirect if the content is permanently gone.
  • Don’t leave outdated jobs indexed as active.

2) Make the widget accessible

Ensure keyboard accessibility

Every interactive control must work with:

  • Tab
  • Shift+Tab
  • Enter
  • Space
  • Arrow keys where appropriate

This includes:

  • Search input
  • Filters
  • Sorting controls
  • Pagination or infinite scroll controls
  • Expand/collapse sections

Use semantic HTML first

Prefer native elements:

  • <button> for buttons
  • <a> for links
  • <input>, <select>, <label> for form controls
  • <fieldset> and <legend> for grouped filters

Avoid using generic <div>s as controls unless you fully implement accessible behavior.

Associate labels with inputs

Every form field should have a visible label, e.g.:

<label for="job-search">Search jobs</label>
<input id="job-search" type="search" />

Provide accessible filter controls

For checkboxes, radio buttons, and dropdowns:

  • Use proper form elements
  • Ensure labels are clickable
  • Make clear what each filter does

Announce dynamic changes

If search results update without a page reload:

  • Use an ARIA live region to announce result counts or updates
  • Don’t rely only on visual changes

Example:

  • “23 jobs found in London”

Manage focus properly

After applying filters or loading results:

  • Keep focus in a logical place
  • If a modal or drawer opens, move focus inside it
  • When it closes, return focus to the triggering control

Provide sufficient color contrast

  • Text and controls must meet WCAG contrast requirements
  • Don’t rely on color alone to convey meaning

Make error states accessible

If search fails or form validation occurs:

  • Provide clear text messages
  • Associate errors with the relevant fields
  • Ensure screen readers can detect them

3) Support screen readers and assistive technologies

Use headings and landmarks

Structure the page logically:

  • <header>
  • <nav>
  • <main>
  • <footer>

Use heading levels in order:

  • One main <h1> for the page
  • <h2>/<h3> for sections and job cards if needed

Make job cards understandable

Each job card should expose:

  • Job title
  • Location
  • Employment type
  • Salary if available
  • Posted date
  • Link to the full job page

Use readable link text:

  • Good: “View Software Engineer job”
  • Bad: “Learn more”

Avoid inaccessible infinite scroll

If you use infinite scroll:

  • Provide a fallback pagination control
  • Ensure new results are announced
  • Let users load more without requiring scrolling alone

Pagination is often more accessible and SEO-friendly than infinite scroll.


4) Make the UI crawlable even if it’s JavaScript-heavy

If your widget is built in React/Vue/Angular/etc.:

  • Prefer server-side rendering or pre-rendering
  • Ensure essential content exists in the HTML response
  • Don’t block indexing with scripts, overlays, or delayed rendering

Avoid common SEO blockers

  • Jobs only loaded after user interaction
  • Search results hidden behind auth or JS-only state
  • No crawlable links to job pages
  • Canonical tags pointing incorrectly
  • Duplicate filter URLs without canonical strategy

5) Use accessible and SEO-friendly search/filter behavior

Keep filters usable and understandable

  • Show current filters clearly
  • Allow users to remove individual filters easily
  • Provide a “Clear all” option
  • Preserve filter state in the URL when useful

Use query parameters carefully

Examples:

  • /jobs?location=remote&team=engineering

Benefits:

  • Shareable
  • Crawlable if implemented properly
  • Better for users and SEO

Prevent duplicate content issues

If many filter combinations exist:

  • Use canonical tags to point to the preferred version
  • Decide which filtered pages should be indexable
  • Use noindex for low-value combinations if necessary

6) Test against accessibility standards

Use WCAG 2.2 AA as the baseline.

Test with:

  • Keyboard only
  • Screen readers:
    • NVDA + Firefox
    • JAWS + Chrome
    • VoiceOver + Safari
    • TalkBack + Chrome on Android
  • Automated tools:
    • Lighthouse
    • axe DevTools
    • WAVE

But don’t rely only on automated testing—manual testing is essential.


7) Test SEO performance

Check:

  • Source HTML contains job content
  • Job pages are indexable
  • Structured data validates
  • Sitemap includes job URLs
  • Canonicals are correct
  • Robots.txt does not block important pages
  • Page titles and meta descriptions are unique

Use:

  • Google Search Console
  • Rich Results Test
  • URL Inspection tool

8) Good implementation pattern

A robust pattern is:

  • Job listing page
    • Crawlable HTML
    • Semantic filters
    • Pagination
  • Job detail page
    • Unique URL
    • Full JobPosting schema
    • Complete content in HTML
  • Search widget
    • Accessible form controls
    • URL-based state
    • Live region for updates
    • Keyboard support

9) Quick compliance checklist

Accessibility

  • All controls are keyboard accessible
  • Inputs have labels
  • Focus is managed correctly
  • Dynamic updates are announced
  • Color contrast meets WCAG
  • Screen reader labels are meaningful
  • Errors are exposed clearly
  • Modal/drawer behavior is accessible

SEO

  • Each job has a unique URL
  • Job content is server-rendered or pre-rendered
  • JobPosting structured data is present
  • Sitemap includes live jobs
  • Canonical tags are correct
  • Expired jobs are handled properly
  • Filter pages have a deliberate indexing strategy

If you want, I can also provide:

  1. a sample accessible job search widget implementation,
  2. a JobPosting schema example, or
  3. a WCAG + SEO audit checklist you can hand to engineering and QA.

Observation history

See 1 earlier observation
Create a free Obsurfable account to unlock historical responses, model comparisons, and deeper brand intelligence.

How did Obsurfable measure this prompt?

Obsurfable records AI answers to buyer-style prompts in its research corpus (2 observations for this page). Metrics are distributions over observations, not a single static ranking.

Which AI systems does Obsurfable collect answers from?

OpenAI, ChatGPT, Google, Gemini, Google AI Mode, Anthropic, Claude, Perplexity, Grok, DeepSeek, Mistral, Copilot, and Meta AI.