Robot Vacuum Thinks the Floor Is a Cliff: Dark Rugs, Thresholds and the Three Real Fixes
Last updated: October 2026 · 9 min read
The robot reaches the edge of the black rug, stops, backs up, tries again from a different angle, and eventually gives up and reports the area as unreachable. Or it halts in the middle of a perfectly flat kitchen with a "cliff sensor error" and a request to move it somewhere safe. Both are the same fault seen from two sides: a sensor built to keep the robot off the stairs is being told, by the floor, that the stairs are everywhere.
Why does my robot vacuum think the floor is a cliff?
A robot vacuum thinks the floor is a cliff because its cliff sensors work by bouncing infrared light off the surface below them and timing the return, and any floor that swallows that light or sends it somewhere else looks to the robot exactly like empty air over a staircase. There are four to six of these sensors around the front half of the underside, each a small dark window a few millimetres wide. When any one of them stops receiving a return, the robot does what it was built to do: stop, reverse and mark the spot as a drop.
Four things cause a false return on a flat floor. Dark surfaces, especially matte black or charcoal rugs and dark-stained wood, absorb most of the infrared and return too little. Glossy dark surfaces, like black porcelain tile, reflect the beam away at an angle so it never comes back to the receiver. Dust or dried mop solution on the sensor window scatters the beam before it leaves. And a real but small drop, like a 15 to 25 mm door sill or the edge of a thick rug onto a low floor, is genuinely a change in distance large enough to trip the threshold on sensitive models. The table sorts the symptom by cause so you can jump to the right fix.
| What the robot does | Probable cause | First thing to try |
|---|---|---|
| Stops at the edge of a dark rug, every time, from every direction | Rug absorbs infrared | No-go zone or a light edge strip |
| Cliff error in the middle of a light floor, random spots | Dirty sensor window | Wipe all sensors, run the self-test |
| Always fails at one corner or one turning direction | Single dirty or failed sensor | Self-test to identify it; clean or replace |
| Will not cross a doorway sill it used to cross | Sill reads as a drop; sometimes a new firmware threshold | Threshold ramp strip |
| Fails on glossy black tile but not matte dark rugs | Beam reflecting away | Sensitivity setting if available, otherwise zone |
| Started after a cleaning-solution mop run | Dried film across the windows | Damp wipe, then dry |
Are the cliff sensors just dirty?
The cliff sensors are just dirty in most cases where a robot reports a cliff on a floor it has cleaned for months, and the proof is that the problem appears on light floors and in random places rather than at one dark rug. Turn the robot over and find the sensor windows: on most models there are four across the front bumper's underside and two near the wheels, each a small recessed dark lens. Wipe every one with a dry microfibre cloth. If the robot also mops, wipe them again with a cloth barely dampened with water, then dry, because cleaning solution carried around the underside leaves a film that a dry cloth smears rather than removes.
Then run the self-test. Roborock hides it under Settings, Device Information, then a sensor test; Dreame under Device Settings and Maintenance; Ecovacs under Advanced Settings. The test reports each sensor's reading with the robot held in the air and sitting on the floor, and a sensor that reads the same in both positions is the dirty or dead one. If a clean window still fails, look at it against the light for a scratch or a crack. The windows are plastic and the robot drags its nose over gravel tracked in from outside, so a scuffed lens that scatters the beam is not rare on robots over a couple of years old. The sensors guide shows where each type sits by brand, and a repeatable single-sensor failure on a robot inside its warranty is a straightforward ticket.
Why does it refuse the dark rug?
It refuses the dark rug because black and very dark fibres absorb infrared almost completely, so the sensor sees the rug the way it sees the open air above a staircase, and no amount of cleaning changes that because nothing is wrong with the sensor. This is the single most common reason a working robot leaves a room half-cleaned, and it is a physics limit rather than a defect. Owners usually discover it with one rug, and the giveaway is that the failure is consistent: same rug, every run, from every approach, with the robot nosing up to the edge and reversing as if the floor ended there.
There are three real fixes and one that looks like a fix. The first is to draw a no-go zone over the rug in the app, which stops the robot wasting ten minutes probing its edge; you lose cleaning on that rug, and the question is whether a rug the robot cannot see was ever going to be cleaned well anyway. The second is to give the sensor something to see. A strip of light-coloured tape or a pale binding along the rug's edge returns enough light for the robot to cross onto the rug, and once on top it reads the fibres differently from the edge-on approach and usually continues. Pale tape works; the retroreflective tape sold for bicycles works better and is nearly invisible against a dark border. The third, on robots that offer it, is lowering the cliff sensitivity, covered below.
The one that looks like a fix is taping over the sensors themselves. It circulates on every forum because it works instantly: a blinded sensor returns a constant reading and the robot crosses anything. It also sends the robot down stairs, off a landing, or over a sunken living-room step, with the robot's full weight landing on its lidar turret. If your home has no drop anywhere the robot can reach, it is your decision. If it has one, the rug is not worth it. Our dark floors guide goes into how the same absorption confuses the carpet sensor and why some dark hard floors trip both at once.
Why will it not cross the doorway threshold?
It will not cross the doorway threshold because the far side of a raised sill is a genuine small drop, and a cliff sensor mounted on the front edge of the robot sees that drop while the robot is still tilted upward on the near side, which exaggerates the distance it measures. Most robots are rated to climb a 20 mm sill, and the climbing is not the problem; the problem is the moment the front sensors hang over the far edge with the body angled up, reading a distance well beyond their threshold. The robot interprets it as a cliff, reverses off the sill, and tries again.
The fix is a threshold ramp, which is a wedge of rubber or wood that turns the sharp far edge into a slope the sensors can track on the way down. Rubber threshold strips sold for wheelchairs and robot vacuums cost a few dollars per doorway and stick down with the tape they come with. A folded doormat does the same job less reliably. If the robot used to cross the sill and stopped after a firmware update, the maker has tightened its cliff threshold, which happens after a run of complaints about robots falling; check the app for a sensitivity setting before buying ramps. The multiple floors guide covers the related problem of a robot that treats the top step as unreachable floor and how to keep maps separated.
Should I lower the cliff sensor sensitivity?
You should lower the cliff sensor sensitivity only if the robot can reach no stair, landing or step anywhere in its map, or if every drop is fenced off by a no-go zone with a margin, because the setting does exactly what the tape does with less certainty about where the new limit sits. Roborock offers it as a toggle in Carpet and Floor settings on recent models; Dreame as a "low floor" or "dark floor" mode in device settings; and a handful of Roomba firmwares expose a minimum reflectance value in the advanced menu. Lowering it tells the robot to accept a weaker return as "floor present", which lets it cross most dark rugs and many sills.
The trade is that a weaker return also comes back from a stair edge under some lighting, and the setting applies everywhere, not just at the rug. If you use it, test it: hold the robot by hand over the top of your stairs with the setting active and watch whether its bumper-side sensors still report a cliff in the app's sensor view. If they do, you have margin. If any one reads floor, turn it back and use zones. A no-go zone has to be drawn with a buffer, since the robot's mapped position can be off by a few centimetres, and a zone that ends at the stair nosing is a zone the robot can overshoot.
| Fix | Works on | Risk | Verdict |
|---|---|---|---|
| Clean the sensors | Random false cliffs, light floors | None | Always first |
| No-go zone over the rug | Any dark rug | Rug not cleaned | Safest permanent fix |
| Light tape at the rug edge | Dark rugs with a defined edge | Slightly visible; may lift | Best when you want the rug cleaned |
| Threshold ramp | Doorway sills, small steps | None | Right fix for sills |
| Lower sensitivity in app | Dark rugs, glossy tile, sills | Robot may miss a real drop | Only with no reachable stairs |
| Tape over the sensors | Everything | Robot falls | Do not, unless the home has no drop at all |
Why did this start suddenly?
It started suddenly for one of three reasons: something changed on the floor, something changed in the firmware, or a sensor failed. The floor is the easiest to check: a new rug, a new doormat, a runner that moved, or a dark floor newly exposed when furniture was rearranged all introduce a false cliff the robot never saw before. Lighting counts too, since strong low sunlight across a dark floor can flood the receiver on some older models and produce false cliffs only in the afternoon. Firmware is the second; release notes rarely say "cliff threshold changed", but a robot that starts refusing sills the week an update landed has told you what happened.
A failed sensor is the third and shows up as a consistent failure in one direction regardless of floor, or a self-test that reports one sensor out of range with the robot on a plain light floor. On robots that also start spinning in circles, bumping walls or losing position, the cliff sensor is unlikely to be the only problem, and the getting stuck guide separates the sensor faults from the navigation ones. If a cliff error comes with a code, the error codes guide lists what each brand's number means and whether a reset is worth trying before a ticket.
What about a robot that falls down the stairs instead?
A robot that falls down the stairs instead of stopping has the opposite fault, and it is more often caused by what is at the top of the stairs than by the sensors. A dark stair runner or a black tread at the top gives a sensor that was already reading "cliff" nothing to change its mind about, which is fine; the dangerous case is a pale, reflective landing edge that returns a strong signal right up to the nosing, so the robot is already committed when the reading drops. The other cause is a lowered sensitivity setting, or tape, that someone applied for a rug and forgot. If a robot has fallen once, run the self-test before trusting it near the stairs again, because the landing usually cracks a sensor window, and fence the top step with a no-go zone that starts a good 20 cm back from the edge.
Everything else that stops a robot mid-run is at the troubleshooting hub. For the sibling problem of a rug that gets wet because the carpet sensor, rather than the cliff sensor, misread it, see mop not lifting on carpet.
Robot still boxed in by the rug?
Infrared-only cliff detection is the limit you are hitting. The robots in our obstacle-avoidance ranking add a downward camera or structured light and read dark rugs as floor.
Best Robot Vacuums for Obstacle Avoidance →