@@ -2,9 +2,12 @@ if (node.getAttribute('id')) {
 	const root = axe.commons.dom.getRootNode(node);
 	const id = axe.commons.utils.escapeSelector(node.getAttribute('id'));
 	const label = root.querySelector(`label[for="${id}"]`);
+	const isLabelVisible = label && axe.commons.dom.isVisible(label);
 
-	if (label && !axe.commons.dom.isVisible(label)) {
-		return true;
+	if (isLabelVisible === false) {
+		const name = axe.commons.text.accessibleTextVirtual(virtualNode).trim();
+		const isNameEmpty = name === '';
+		return isNameEmpty;
 	}
 }
 return false;
if (node.getAttribute('id')) {
	const root = axe.commons.dom.getRootNode(node);
	const id = axe.commons.utils.escapeSelector(node.getAttribute('id'));
	const label = root.querySelector(`label[for="${id}"]`);

	if (label && !axe.commons.dom.isVisible(label)) {
		return true;
	}
}
return false;

I think this now fails if there is no label. Should probably just put the if statement back to the way it was.