diff --git a/crates/biome_aria/src/roles.rs b/crates/biome_aria/src/roles.rs
index b84de06dc6d1..a61799d21056 100644
--- a/crates/biome_aria/src/roles.rs
+++ b/crates/biome_aria/src/roles.rs
@@ -1174,6 +1174,23 @@ impl<'a> AriaRoles {
return false;
}
+ // Allow SVG elements with role="img" attribute
+ // This is recommended for accessibility purposes
+ // Example:
+ // ```
+ // ;
+ // ```
+ // For more information, see:
+ // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/img_role#svg_and_roleimg
+ if element_name == "svg"
+ && attributes
+ .as_ref()
+ .and_then(|a| a.get("role"))
+ .map_or(false, |values| values.iter().any(|x| x == "img"))
+ {
+ return false;
+ }
+
// SVG elements, by default, do not have interactive semantics.
// They are primarily used for graphics and visual rendering. While they can be made interactive with additional
// attributes and JavaScript, inherently they don't provide user interaction capabilities.
diff --git a/crates/biome_js_analyze/src/lint/a11y/no_interactive_element_to_noninteractive_role.rs b/crates/biome_js_analyze/src/lint/a11y/no_interactive_element_to_noninteractive_role.rs
index 6682f11aedd1..d20f08d48b4b 100644
--- a/crates/biome_js_analyze/src/lint/a11y/no_interactive_element_to_noninteractive_role.rs
+++ b/crates/biome_js_analyze/src/lint/a11y/no_interactive_element_to_noninteractive_role.rs
@@ -73,6 +73,11 @@ impl Rule for NoInteractiveElementToNoninteractiveRole {
return None;
}
+ // A