Root Cause Diagnosis
The printer’s gap (transmissive) sensor learns the physical length of the label plus its inter-label gap during calibration and stores that value as the reference for where to stop feeding and start printing. When the sensor mis-measures this cycle — commonly by locking onto only half the actual gap-to-gap distance — it advances exactly one label’s worth of media per print job but interprets every second gap as the “true” label boundary, so it prints on one label and dumps the next as a blank feed. This almost always stems from a stale calibration profile left over from a previous roll of different length/gap stock, or from the driver’s configured label length not matching the physical label, which causes the firmware’s internal gap-detection window to drift out of sync with the actual media.
Quick Fix
Force a fresh manual calibration with the correct stock loaded. On Zebra printers, send this ZPL directly to the printer (via USB, network port 9100, or a terminal utility):
^XA
~JC
^XZ
~JC forces the printer to reset and recalibrate its media sensor against the currently loaded label stock. Run one blank feed cycle afterward to confirm alternating labels have stopped.
Step-by-Step Resolution
1. Confirm the physical label dimensions match your printer/driver configuration.
Measure the label height and the gap between labels with calipers or a ruler. A common cause is software set to a nominal size (e.g., 4″ x 6″) when the actual stock has a different length or a larger/smaller gap.
2. Reset to factory calibration values before recalibrating (Zebra ZPL):
^XA
^JUF
^XZ
^JUF restores factory default sensor calibration values, clearing out a bad profile from prior media before you recalibrate.
3. Run the printer’s physical calibration cycle, which is more reliable than the software-only ~JC reset because it physically feeds several labels to sample the gap pattern:
- Zebra (button method): Power off. Hold FEED while powering on. Release when the printer feeds 2–3 labels and the status light stabilizes.
- TSC/TSPL printers, send:
SIZE 100 mm,150 mm
GAP 3 mm,0 mm
CLS
AUTODETECT
AUTODETECT forces the printer to feed several labels while auto-sensing the actual gap distance, overwriting any prior stored value.
- Eltron/EPL printers, send:
xa
Q812,26
q609
S3
D8
JB
xz
Where Q812,26 sets label length (in dots) and gap length, and JB forces gap sensing mode with a live calibration pass.
4. Verify the sensor is physically aligned with the gap.
Open the printhead and check the transmissive sensor’s carriage position — it must sit under the gap between labels, not under a die-cut notch, printed black bar, or the edge of the backing paper. On adjustable-sensor models, slide the sensor bracket left/right until its position indicator (often a red LED visible through the label) lines up with the center of the label width, avoiding rounded corners.
5. Print a sensor profile report to inspect the raw signal, rather than guessing:
~JG
Send this ZPL command, then read the printed profile: a clean signal shows sharp, evenly spaced peaks and troughs corresponding to label and gap. A flat or noisy signal indicates a dirty sensor lens or media with low contrast between label and gap (see edge cases below).
6. Explicitly set the sense mode via SGD variables (Zebra printers using Zebra Setup Utilities or a raw terminal on port 9100):
! U1 setvar "media.type" "label"
! U1 setvar "media.sense_mode" "gap"
This ensures the printer isn’t defaulting to continuous/journal mode, which ignores the gap sensor entirely and can produce the same skipping symptom if label length in the driver is wrong.
7. Clean the sensor.
Adhesive residue and dust on the gap sensor lens (located inside the label path, usually beneath the platen roller area) attenuate the light signal enough to cause intermittent misreads. Wipe with isopropyl alcohol on a lint-free swab; do not use compressed air alone, as it redistributes dust rather than removing adhesive film.
8. Save calibration values so they persist across power cycles (Zebra):
^XA
^JUS
^XZ
Without this, some printer configurations revert to default/auto-calibration behavior on next power-up, reproducing the fault after a reboot even though the fix worked during the session.
Why This Fails for Some Users
- Pre-printed or colored label stock: labels with heavy ink coverage, foil, or dark backing paper absorb or reflect light unevenly, causing the transmissive sensor to misread the gap boundary regardless of calibration accuracy — these require switching to a reflective/black-mark sensor mode instead of gap mode, if the printer supports it.
- Die-cut labels with rounded corners or irregular gaps: rounded corners create a gradual light transition rather than a sharp edge, which some sensor firmware interprets as a partial gap, causing the alternating-skip pattern even after a clean calibration.
- Driver-level label length cached separately from firmware calibration: on Windows, the ZDesigner or Seagull driver’s “Stock” or “Form” settings can hold a cached label length independent of what you calibrate at the firmware level; a printer-level fix without also updating Printer Properties > Device Settings > Stock/Form reverts on the next print job.
- Continuous (non-gap) media incorrectly treated as die-cut: if
media.sense_modeis left atgapon continuous roll stock with no physical gap at all, the sensor free-runs and produces the same one-good-one-blank pattern; confirm the media type before troubleshooting sensor alignment. - Third-party or generic labels with inconsistent adhesive backing thickness: variable backing opacity between rolls from different manufacturers shifts the sensor’s calibrated threshold even when dimensions are identical, requiring recalibration per roll batch, not just per label size.
- Linux/CUPS raw printing via
lp/lpr: raw ZPL/TSPL sent through a generic CUPS raw queue bypasses driver-level label-size enforcement entirely, so the fix must be applied at the firmware/SGD level (steps 3 and 6) since there’s no driver layer to correct.