Kilotest: Violations of ID not unique
issue for Human Rights Watch page
Basics
About the page
- URL: https://www.hrw.org/
- Tested 2 days ago on 2026-10-07 at 21:44 by job
261007T2129-oiq - Summary of results:
- Rule engines:
- Called: 12
- Were able to test: 12
- Reported any rule violations: 11
- Violations: 2187
- Violators: 1149
- Issues: 65
- Rule engines:
- Download the full technical report (JSON)
About the issue
- Why it matters: User may be pointed to the wrong item
- Priority: highest
- Related WCAG standard: 4.1
- Reported by 4 rule engines (ASLint + Html Checker + HTML CodeSniffer + QualWeb)
- Violations: 54
- Violators: 33
Violators
Here are the HTML elements reported to violate rules belonging to the ID not unique
issue.
Take me there
links will open the page in a new tab and try to scroll to the element and highlight it. This does not always succeed. You can return here by closing the new tab.
Element 2786
- Tag name:
DEFS - Text: [not applicable]
- Start tag:
[not obtained] - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[1] /div[1] /div[1] /*[name()='svg'] /defs[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 2784
- Tag name:
G - Text: [not applicable]
- Start tag:
[not obtained] - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[1] /div[1] /div[1] /*[name()='svg'] /g[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 265
- Tag name:
BUTTON - Text:
Search … }
- Start tag:
<button type="submit" aria-polite="live" data-component-id="hrw_components:button" class="hrw-button mobile_menu__search_button"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /dialog[1] /div[1] /div[2] /form[1] /button[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 2787
- Tag name:
DEFS - Text: [not applicable]
- Start tag:
[not obtained] - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[1] /*[name()='svg'] /defs[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 2785
- Tag name:
G - Text: [not applicable]
- Start tag:
[not obtained] - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[1] /*[name()='svg'] /g[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 251
- Tag name:
clipPath - Text: [not applicable]
- Start tag:
<clipPath id="clip0_1358_62"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[1] /svg[1] /defs[1] /clippath[1] - Bounding box: [not obtained]
- Reported by Html Checker + HTML CodeSniffer
- Tag name:
Element 230
- Tag name:
mask - Text: [not applicable]
- Start tag:
<mask id="mask0_1358_62" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="62" height="62"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[1] /svg[1] /g[1] /mask[1] - Bounding box: [not obtained]
- Reported by Html Checker + HTML CodeSniffer
- Tag name:
Element 915
- Tag name:
BUTTON - Text:
Search … }
- Start tag:
<button type="submit" aria-polite="live" data-component-id="hrw_components:button" class="hrw-button mobile_menu__search_button"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[2] /form[1] /button[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 917
- Tag name:
svg - Text: [not applicable]
- Start tag:
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" version="1.1" viewBox="0 0 24 24" width="24" height="24"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[2] /form[1] /button[1] /svg[1] - Bounding box: [not obtained]
- Reported by Html Checker + HTML CodeSniffer
- Tag name:
Element 921
- Tag name:
DIV - Text:
English … More Languages
- Start tag:
<div class="mobile_header__language_wrapper"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[3] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 925
- Tag name:
DIV - Text:
Choose your language … Close
- Start tag:
<div class="hrw-modal--header"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[3] /details[1] /dialog[1] /div[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 927
- Tag name:
BUTTON - Text:
Close
- Start tag:
<button type="button" id="mobile_header__language__modal" onclick="this.closest('dialog').close()" class="region--header hrw-button hrw-modal--close" data-component-id="hrw_components:button"> - XPath:
/html/body /div[1] /div[1] /header[1] /div[1] /div[2] /div[1] /div[3] /details[1] /dialog[1] /div[1] /button[1] - Bounding box: [not obtained]
- Reported by Html Checker + HTML CodeSniffer
- Tag name:
Element 1910
- Tag name:
SECTION - Text:
Regions … Next
- Start tag:
<section id="regions" class="strip"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[2] /section[1] - Bounding box: x = 260, y = 6777, width = 1400, height = 663
- Reported by ASLint
- Tag name:
Element 1913
- Tag name:
DIV - Text:
AFRICA … Next
- Start tag:
<div id="regions--carousel" class="carousel splide is-overflow is-initialized splide--slide splide--ltr splide--draggable is-active" data-splide="{"perPage": 1, "breakpoints": {"480": {"perPage": 2}, "768": {"perPage": 3}, "960": {"perPage": 4}}}" role="region" aria-roledescription="carousel"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[2] /section[1] /div[1] - Bounding box: x = 260, y = 6849, width = 1400, height = 591
- Reported by QualWeb
- Tag name:
Element 2072
- Tag name:
DIV - Text:
Previous … Next
- Start tag:
<div class="splide__arrows splide__arrows--ltr"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[2] /section[1] /div[1] /div[2] - Bounding box: x = 260, y = 7416, width = 1400, height = 24
- Reported by ASLint
- Tag name:
Element 2073
- Tag name:
BUTTON - Text:
Previous
- Start tag:
<button type="button" id="regions--carousel" data-component-id="hrw_components:button" class="hrw-button splide__arrow splide__arrow--prev" aria-label="Go to last slide" aria-controls="regions--carousel-track"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[2] /section[1] /div[1] /div[2] /button[1] - Bounding box: x = 862, y = 7416, width = 24, height = 24
- Reported by Html Checker + HTML CodeSniffer + QualWeb
- Tag name:
Element 2077
- Tag name:
BUTTON - Text:
Next
- Start tag:
<button type="button" id="regions--carousel" data-component-id="hrw_components:button" class="hrw-button splide__arrow splide__arrow--prev splide__arrow splide__arrow--next" aria-label="Next slide" aria-controls="regions--carousel-track"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[2] /section[1] /div[1] /div[2] /button[2] - Bounding box: x = 1034, y = 7416, width = 24, height = 24
- Reported by Html Checker + HTML CodeSniffer + QualWeb
- Tag name:
Element 2095
- Tag name:
SECTION - Text:
Topics … Next
- Start tag:
<section id="topics" class="strip"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[3] /section[1] - Bounding box: x = 260, y = 7464, width = 1400, height = 687
- Reported by ASLint
- Tag name:
Element 2098
- Tag name:
DIV - Text:
UNITED NATIONS … Next
- Start tag:
<div id="topics--carousel" class="carousel splide is-overflow is-initialized splide--slide splide--ltr splide--draggable is-active" data-splide="{"perPage": 1, "breakpoints": {"480": {"perPage": 2}, "768": {"perPage": 3}, "960": {"perPage": 4}}}" role="region" aria-roledescription="carousel"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[3] /section[1] /div[1] - Bounding box: x = 260, y = 7536, width = 1400, height = 615
- Reported by QualWeb
- Tag name:
Element 2569
- Tag name:
DIV - Text:
Previous … Next
- Start tag:
<div class="splide__arrows splide__arrows--ltr"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[3] /section[1] /div[1] /div[2] - Bounding box: x = 260, y = 8128, width = 1400, height = 24
- Reported by ASLint
- Tag name:
Element 2570
- Tag name:
BUTTON - Text:
Previous
- Start tag:
<button type="button" id="topics--carousel" data-component-id="hrw_components:button" class="hrw-button splide__arrow splide__arrow--prev" aria-label="Go to last slide" aria-controls="topics--carousel-track"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[3] /section[1] /div[1] /div[2] /button[1] - Bounding box: x = 754, y = 8128, width = 24, height = 24
- Reported by Html Checker + HTML CodeSniffer + QualWeb
- Tag name:
Element 2574
- Tag name:
BUTTON - Text:
Next
- Start tag:
<button type="button" id="topics--carousel" data-component-id="hrw_components:button" class="hrw-button splide__arrow splide__arrow--prev splide__arrow splide__arrow--next" aria-label="Next slide" aria-controls="topics--carousel-track"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[10] /div[1] /div[3] /section[1] /div[1] /div[2] /button[2] - Bounding box: x = 1142, y = 8128, width = 24, height = 24
- Reported by Html Checker + HTML CodeSniffer + QualWeb
- Tag name:
Element 1016
- Tag name:
SECTION - Text:
Latest News … Next
- Start tag:
<section id="latest-news" class="strip"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[2] /div[1] /div[1] /section[1] - Bounding box: x = 260, y = 770, width = 1400, height = 350
- Reported by ASLint
- Tag name:
Element 1023
- Tag name:
DIV - Text:
Afghans Await Justice 25 Years After War Began … Next
- Start tag:
<div id="latest-news--carousel" class="carousel splide is-overflow is-initialized splide--slide splide--ltr splide--draggable is-active" data-splide="{"perPage": 4, "fixedWidth": "24%", "mediaQuery": "max", "breakpoints": { "960": {"perPage": 3, "fixedWidth": "30%"}, "640": {"destroy": true} }}" role="region" aria-roledescription="carousel"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[2] /div[1] /div[1] /section[1] /div[1] - Bounding box: x = 260, y = 842, width = 1400, height = 278
- Reported by QualWeb
- Tag name:
Element 1090
- Tag name:
DIV - Text:
Previous … Next
- Start tag:
<div class="splide__arrows splide__arrows--ltr"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[2] /div[1] /div[1] /section[1] /div[1] /div[2] - Bounding box: x = 260, y = 1096, width = 1400, height = 24
- Reported by ASLint
- Tag name:
Element 1091
- Tag name:
BUTTON - Text:
Previous
- Start tag:
<button type="button" id="latest-news--carousel" data-component-id="hrw_components:button" class="hrw-button splide__arrow splide__arrow--prev" aria-label="Go to last slide" aria-controls="latest-news--carousel-track"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[2] /div[1] /div[1] /section[1] /div[1] /div[2] /button[1] - Bounding box: x = 844, y = 1096, width = 24, height = 24
- Reported by Html Checker + HTML CodeSniffer + QualWeb
- Tag name:
Element 1095
- Tag name:
BUTTON - Text:
Next
- Start tag:
<button type="button" id="latest-news--carousel" data-component-id="hrw_components:button" class="hrw-button splide__arrow splide__arrow--prev splide__arrow splide__arrow--next" aria-label="Next slide" aria-controls="latest-news--carousel-track"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[2] /div[1] /div[1] /section[1] /div[1] /div[2] /button[2] - Bounding box: x = 1052, y = 1096, width = 24, height = 24
- Reported by Html Checker + HTML CodeSniffer + QualWeb
- Tag name:
Element 1381
- Tag name:
DIV - Text:
Play … Read a text description of this video
- Start tag:
<div class="video-horizontal video is-showing-poster is-active" data-orientation="horizontal" data-type="youtube" data-id="VyOVLbVxEwc" id="video-VyOVLbVxEwc"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[7] /div[1] /div[1] /div[1] /section[1] /div[1] /div[1] - Bounding box: x = 260, y = 3205, width = 808, height = 499
- Reported by ASLint
- Tag name:
Element 1397
- Tag name:
DIV - Text:
Read a text description of this video … Close
- Start tag:
<div class="hrw-modal--header"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[7] /div[1] /div[1] /div[1] /section[1] /div[1] /div[1] /details[1] /dialog[1] /div[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 1399
- Tag name:
BUTTON - Text:
Close
- Start tag:
<button type="button" id="text-description-VyOVLbVxEwc" onclick="this.closest('dialog').close()" data-component-id="hrw_components:button" class="hrw-button hrw-modal--close" data-event-action="Videos"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[7] /div[1] /div[1] /div[1] /section[1] /div[1] /div[1] /details[1] /dialog[1] /div[1] /button[1] - Bounding box: [not obtained]
- Reported by Html Checker + HTML CodeSniffer
- Tag name:
Element 1506
- Tag name:
DIV - Text:
Play … Narrator: There’s a brutal conflict going on in West Africa that many people have never heard of. In Burkina Faso, government forces have been fighting Islamist armed groups for more than a decade. All sides have made attacks on civilians a key part of their strategies, killing thousands. More than 2 million people have been displaced by the fighting. Soundbite: “That day, 25 people died on the spot. Some were cut up by the impact of the airstrike; others had their heads cut off. Some died from choking on the dust they inhaled after the strike. After the strike, everyone started to flee.” Narrator: So why haven’t many people heard about this crisis? Burkina Faso’s military government has banned or silenced local and international media and created a climate of fear to deter people from speaking out. Soundbite: “The VDPs [government-backed militia] surrounded us, they told us to watch what they were going to do. There were people who had been stabbed with iron bars. When they finished stabbing, they slit their throats.” Narrator: Human Rights Watch spent a year and a half documenting 57 attacks across Burkina Faso. We spoke with nearly 400 witnesses over the phone or in neighboring countries where they had fled and documented the killing of at least 1,800 civilians between 2023 and 2025. But this may be the tip of the iceberg. Narrator: Since President Ibrahim Traoré took power in a military coup in 2022, he has made the fight against Islamist armed groups his main objective. Narrator: The military has armed tens of thousands of people in a militia called the Volunteers for the Defense of the Homeland, commonly known as VDPs. If a community has VDPs, JNIM, one of the main Islamist armed groups, often targets the entire population. And government forces have massacred civilians simply for living in areas that JNIM controls. Narrator: The military and VDPs have especially targeted ethnic Fulani people whom they accuse of supporting JNIM. Entire Fulani communities have been attacked and forcibly displaced, and their property looted, acts that amount to ethnic cleansing. Soundbite: They [VDPs] told us: “It’s [President] Ibrahim Traoré who sent us to kill you.” And they began slitting the throats of people in front of us. They called us “terrorists,” which we are not. Narrator: Military abuses have fueled recruitment by JNIM and the cycle of retaliatory attacks has led to widespread violence against civilians. All sides have committed abuses that amount to war crimes and crimes against humanity. To seek justice for these crimes, we needed to identify who was responsible. Narrator: So, we used AI to go through thousands of hours of footage from Burkina Faso’s state-owned news channel and a social media platform used by JNIM. The software we developed identified key information about JNIM, military units, and the names of people involved in specific attacks. This information, along with witness accounts, allowed us to identify members of the Burkinabé armed forces and JNIM who were in a position of command during each attack. Narrator: These include: Capt. Ibrahim Traoré, the president of Burkina Faso, and top military commanders. It also includes the leaders of JNIM, such as Iyad Ag Ghaly, Amadou Kouffa, and Jafar Dicko. Narrator: None have been held accountable. States should investigate these serious international crimes, and the International Criminal Court should bring perpetrators to justice. Accountability and civilian protection cannot wait.
- Start tag:
<div class="video-horizontal video is-showing-poster" data-orientation="horizontal" data-type="youtube" data-id="mHlPqDVulnI" id="video-mHlPqDVulnI"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[7] /div[1] /div[1] /div[1] /section[1] /div[1] /div[4] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 1522
- Tag name:
DIV - Text:
Read a text description of this video … Close
- Start tag:
<div class="hrw-modal--header"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[7] /div[1] /div[1] /div[1] /section[1] /div[1] /div[4] /details[1] /dialog[1] /div[1] - Bounding box: [not obtained]
- Reported by ASLint
- Tag name:
Element 1524
- Tag name:
BUTTON - Text:
Close
- Start tag:
<button type="button" id="text-description-mHlPqDVulnI" onclick="this.closest('dialog').close()" data-component-id="hrw_components:button" class="hrw-button hrw-modal--close" data-event-action="Videos"> - XPath:
/html/body /div[1] /div[1] /main[1] /div[2] /div[2] /div[2] /div[1] /div[7] /div[1] /div[1] /div[1] /section[1] /div[1] /div[4] /details[1] /dialog[1] /div[1] /button[1] - Bounding box: [not obtained]
- Reported by Html Checker + HTML CodeSniffer
- Tag name: