<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Bertrand Morel</title>
    <description>The latest articles on DEV Community by Bertrand Morel (@bertrandmorel).</description>
    <link>https://dev.to/bertrandmorel</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4083778%2F95cf8caf-4ee0-46f5-b712-81c1cd30cbd6.png</url>
      <title>DEV Community: Bertrand Morel</title>
      <link>https://dev.to/bertrandmorel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bertrandmorel"/>
    <language>en</language>
    <item>
      <title>Semantic HTML Is a Shared Language for Accessibility, SEO, and AI</title>
      <dc:creator>Bertrand Morel</dc:creator>
      <pubDate>Tue, 18 Aug 2026 19:55:28 +0000</pubDate>
      <link>https://dev.to/edikka/semantic-html-is-a-shared-language-for-accessibility-seo-and-ai-53mh</link>
      <guid>https://dev.to/edikka/semantic-html-is-a-shared-language-for-accessibility-seo-and-ai-53mh</guid>
      <description>&lt;p&gt;A page can look perfectly clear and still be structurally ambiguous.&lt;/p&gt;

&lt;p&gt;Visual design gives sighted users powerful clues: size, color, spacing, position, icons, and motion. Those clues weaken or disappear when the same page is read through an accessibility tree, parsed by a crawler, checked by an audit tool, or extracted by an AI system.&lt;/p&gt;

&lt;p&gt;That is where semantic HTML matters. It does not guarantee a ranking, an AI citation, or accessibility compliance. It does something more fundamental: it reduces how much every reader has to guess.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An accessible page is first a page that is more reliable to interpret. That is a clarity advantage, not an automatic visibility promise.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  One page, four different readers
&lt;/h2&gt;

&lt;p&gt;The same interface exposes different signals depending on who—or what—is reading it.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reader&lt;/th&gt;
&lt;th&gt;Signals it uses&lt;/th&gt;
&lt;th&gt;Common source of ambiguity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sighted user&lt;/td&gt;
&lt;td&gt;Visual hierarchy, labels, spacing, position, feedback&lt;/td&gt;
&lt;td&gt;A polished interface with vague actions or discreet errors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen reader&lt;/td&gt;
&lt;td&gt;Accessibility tree, roles, names, landmarks, heading and focus order&lt;/td&gt;
&lt;td&gt;Unnamed buttons, fake headings, vague links, unmanaged focus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Search crawler&lt;/td&gt;
&lt;td&gt;Rendered HTML, links, headings, main content, canonical rules, structured data&lt;/td&gt;
&lt;td&gt;Late content, orphan pages, confused hierarchy, weak anchor text&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI or extraction system&lt;/td&gt;
&lt;td&gt;Extractable text, sections, entities, context, sources, evidence&lt;/td&gt;
&lt;td&gt;Generic blocks, implicit relationships, disconnected proof&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The overlap is not “optimization for machines.” It is explicit communication.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tempting claim—and the useful mechanism
&lt;/h2&gt;

&lt;p&gt;Semantic HTML is often wrapped in promises that go too far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No:&lt;/strong&gt; accessibility guarantees better Google rankings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yes:&lt;/strong&gt; accessibility can make a page more robust to parse, audit, and understand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No:&lt;/strong&gt; ARIA and semantic HTML are a GEO strategy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yes:&lt;/strong&gt; a clear document structure supports content, entities, links, and evidence that other systems can use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No:&lt;/strong&gt; valid markup proves that a journey is accessible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yes:&lt;/strong&gt; valid markup creates a stronger foundation for human testing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The practical mechanism is &lt;strong&gt;ambiguity reduction&lt;/strong&gt;. A heading should not have to be inferred from a large font. A button should not have to be inferred from an icon. A data table should not have to be reconstructed from visual alignment.&lt;/p&gt;

&lt;h2&gt;
  
  
  A card that looks fine but says very little
&lt;/h2&gt;

&lt;p&gt;Consider a service card with a heading, an icon, an email field, and a submit action.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card"&lt;/span&gt; &lt;span class="na"&gt;onclick=&lt;/span&gt;&lt;span class="s"&gt;"location.href='/audit'"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"big"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Accessibility audit&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/icon-check.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt; &lt;span class="na"&gt;placeholder=&lt;/span&gt;&lt;span class="s"&gt;"Your email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&amp;gt;&amp;lt;svg&amp;gt;&lt;/span&gt;&lt;span class="c"&gt;&amp;lt;!-- ... --&amp;gt;&lt;/span&gt;&lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A sighted user may reconstruct the intent from the layout. Other readers receive a weaker model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the visual heading is not a heading;&lt;/li&gt;
&lt;li&gt;the card behaves like a link but has no link semantics;&lt;/li&gt;
&lt;li&gt;the image has no defined role;&lt;/li&gt;
&lt;li&gt;the field has no persistent label;&lt;/li&gt;
&lt;li&gt;the button has no accessible name;&lt;/li&gt;
&lt;li&gt;click behavior is not equivalent to a clear form submission.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now make the relationships explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;article&lt;/span&gt; &lt;span class="na"&gt;aria-labelledby=&lt;/span&gt;&lt;span class="s"&gt;"accessibility-audit-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;h3&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"accessibility-audit-title"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Accessibility audit&lt;span class="nt"&gt;&amp;lt;/h3&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;img&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/icon-check.svg"&lt;/span&gt; &lt;span class="na"&gt;alt=&lt;/span&gt;&lt;span class="s"&gt;""&lt;/span&gt; &lt;span class="na"&gt;aria-hidden=&lt;/span&gt;&lt;span class="s"&gt;"true"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;
    Identify keyboard, form, and HTML structure blockers.
  &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;form&lt;/span&gt; &lt;span class="na"&gt;action=&lt;/span&gt;&lt;span class="s"&gt;"/audit/request"&lt;/span&gt; &lt;span class="na"&gt;method=&lt;/span&gt;&lt;span class="s"&gt;"post"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;label&lt;/span&gt; &lt;span class="na"&gt;for=&lt;/span&gt;&lt;span class="s"&gt;"audit-email"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Work email&lt;span class="nt"&gt;&amp;lt;/label&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;input&lt;/span&gt;
      &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"audit-email"&lt;/span&gt;
      &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
      &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
      &lt;span class="na"&gt;autocomplete=&lt;/span&gt;&lt;span class="s"&gt;"email"&lt;/span&gt;
      &lt;span class="na"&gt;required&lt;/span&gt;
      &lt;span class="na"&gt;aria-describedby=&lt;/span&gt;&lt;span class="s"&gt;"audit-email-help"&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"audit-email-help"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      We will use this address only to answer your request.
    &lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"submit"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Request the audit&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/form&amp;gt;&lt;/span&gt;

  &lt;span class="nt"&gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/audit/accessibility"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    Read the accessibility audit method
  &lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/article&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The second version does not merely “add accessibility attributes.” It describes the content, action, destination, and input relationship in native HTML.&lt;/p&gt;

&lt;p&gt;Notice what it does &lt;strong&gt;not&lt;/strong&gt; do: it does not add ARIA to elements that already have the right semantics. Native HTML carries most of the model.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nine signals that reduce structural ambiguity
&lt;/h2&gt;

&lt;p&gt;This is not a complete WCAG audit. It is a compact structural layer that can reveal weak pages quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. A coherent title, H1, and heading outline
&lt;/h3&gt;

&lt;p&gt;The browser title, H1, and H2s should describe the same subject. Do not use heading elements to obtain a visual size, and do not use styled &lt;code&gt;div&lt;/code&gt; elements as headings.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. One identifiable main region
&lt;/h3&gt;

&lt;p&gt;Use a single &lt;code&gt;main&lt;/code&gt; for the page's primary content. Add native landmarks such as &lt;code&gt;nav&lt;/code&gt;, &lt;code&gt;header&lt;/code&gt;, &lt;code&gt;footer&lt;/code&gt;, and &lt;code&gt;aside&lt;/code&gt; where their roles are real and useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Links that retain meaning outside their paragraph
&lt;/h3&gt;

&lt;p&gt;“Read the WCAG audit method” carries a destination. Five links named “learn more” force every reader to rebuild context.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Buttons named after their actual action
&lt;/h3&gt;

&lt;p&gt;Use labels such as “Open filters,” “Close dialog,” or “Submit the audit request.” An icon may support the label; it should not be the only source of meaning.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Image alternatives based on purpose
&lt;/h3&gt;

&lt;p&gt;An informative image needs an alternative that communicates what it adds. A decorative image should use an empty alternative and stay out of the accessibility tree.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Form fields connected to labels, help, and errors
&lt;/h3&gt;

&lt;p&gt;A placeholder is not a label. Connect persistent labels and relevant help text, and ensure that error messages identify both the problem and the correction.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Tables reserved for actual data
&lt;/h3&gt;

&lt;p&gt;When a table expresses a comparison or a dataset, use headers and captions that let cells be understood without relying on position alone. Do not use tables for page layout.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. A declared document language
&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;lang&lt;/code&gt; attribute affects pronunciation, assistive technologies, lexical interpretation, and text-processing tools. Mark genuine changes of language inside the page as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. A DOM order that remains logical without CSS
&lt;/h3&gt;

&lt;p&gt;If the page loses its meaning when read in DOM order, the design is hiding a structural weakness. Visual reordering should not create a different story from source order.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 20-minute structural readability test
&lt;/h2&gt;

&lt;p&gt;Choose one important page—a service page, signup path, contact form, or documentation entry—and check the following:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Evidence to collect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3 min&lt;/td&gt;
&lt;td&gt;Read only the title and heading outline&lt;/td&gt;
&lt;td&gt;The subject and major sections remain understandable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 min&lt;/td&gt;
&lt;td&gt;Inspect landmarks and DOM order&lt;/td&gt;
&lt;td&gt;One &lt;code&gt;main&lt;/code&gt;; navigation and secondary regions are distinct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 min&lt;/td&gt;
&lt;td&gt;List links and buttons without surrounding text&lt;/td&gt;
&lt;td&gt;Every destination and action remains understandable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 min&lt;/td&gt;
&lt;td&gt;Use the page with a keyboard&lt;/td&gt;
&lt;td&gt;Focus is visible, logical, and never trapped or lost&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4 min&lt;/td&gt;
&lt;td&gt;Inspect the accessibility tree&lt;/td&gt;
&lt;td&gt;Headings, controls, names, roles, and states match the interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 min&lt;/td&gt;
&lt;td&gt;Compare visible content with JSON-LD&lt;/td&gt;
&lt;td&gt;Entities and claims do not contradict what the page shows&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This test is deliberately short. Its purpose is to find pages that need deeper investigation, not to issue a compliance claim.&lt;/p&gt;

&lt;h2&gt;
  
  
  What automation still cannot prove
&lt;/h2&gt;

&lt;p&gt;Lighthouse, axe, WAVE, HTML validators, and custom scripts are excellent at repeatable checks. They can report a missing label or an unnamed button. They cannot reliably decide whether:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the chosen label makes sense to the intended user;&lt;/li&gt;
&lt;li&gt;the error message helps someone complete the form;&lt;/li&gt;
&lt;li&gt;the heading structure reflects the real information hierarchy;&lt;/li&gt;
&lt;li&gt;keyboard order matches the task;&lt;/li&gt;
&lt;li&gt;an image alternative communicates the right information;&lt;/li&gt;
&lt;li&gt;structured data accurately represents the visible claim.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A strong review therefore combines at least four layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;automated rules;&lt;/li&gt;
&lt;li&gt;DOM and accessibility-tree inspection;&lt;/li&gt;
&lt;li&gt;keyboard and assistive-technology testing;&lt;/li&gt;
&lt;li&gt;a real end-to-end journey.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Automation gives coverage. Human testing gives meaning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where SEO and AI actually fit
&lt;/h2&gt;

&lt;p&gt;Clear HTML is not a shortcut to visibility. Search and AI visibility depend on many other factors: usefulness, sources, evidence, entities, internal links, reputation, indexability, and the systems that choose which documents to retrieve or cite.&lt;/p&gt;

&lt;p&gt;Semantic structure prepares a lower layer. Before asking whether a page deserves to be ranked, extracted, or cited, make sure its content and actions can be read without reconstructing them from appearance.&lt;/p&gt;

&lt;p&gt;The useful question is not:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Will semantic HTML make an AI cite this page?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How much meaning disappears when the page is read without its visual design?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question produces better interfaces for people first—and more reliable documents for every other reader.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;AI-assistance disclosure: this DEV edition was adapted from my original Edikka article with AI assistance for structure and English editing. The technical positions, examples, verification, and publication decision remain my responsibility.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>webdev</category>
      <category>seo</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
