What this error means

This check is a census, not a connectivity test. ERC walks every sheet, collects every global label, resolves any text variables in it, and counts how many times each resulting name occurs in the whole schematic. Every name that occurs exactly once gets one violation, placed at that label.

Nothing else is considered: not pins, not wires, not whether the net goes anywhere. Two global labels with the same name silence the check even when they sit on the same wire, because the name now "appears twice". Names are compared after variable expansion, and MISO and miso are different names.

The check exists because a global label's job is to connect places by name; a name used once connects nothing, which usually means its partner is missing or misspelled. It ships at Ignore severity in KiCad 9 and 10, because a single global label is also a legitimate way to name a net and nothing more. You only see this violation after raising it to Warning or Error in Schematic Setup → Electrical Rules → Violation Severity (under Connections).

Common causes

1. The counterpart label has a typo

SPI_MISO on one sheet, SPI_MIS0 on the other. Each name now appears exactly once, so you get two violations, one at each label. A pair of violations with near-identical names is the fingerprint of this case, and it is the mistake the check was built to catch: the two nets look connected on paper and are not.

2. The matching label was never placed, or got deleted

The second end of the connection doesn't exist yet (sheet still being drawn) or went away in an edit (a block of circuitry deleted, its labels with it). The surviving label names a net that no longer goes anywhere else.

3. The single use is deliberate

A global label is also the usual way to force a net's name, so it shows up nicely in the PCB editor, in netclass assignments, or in SPICE output. One label, one net, no second end intended. This is exactly why the check defaults to Ignore; if you enabled it, these nets will be flagged along with the real mistakes.

How to fix it

Place the matching label, or make the names match

  1. If you get two violations with near-identical names, it's a typo: edit one label (double-click it) to match the other exactly.
  2. If you get one violation, place the missing counterpart: select the flagged label, duplicate it (Ctrl+D), and drop the copy on the net it should connect to — duplicating guarantees the text is identical. Ctrl+L places a fresh global label if you'd rather type it.
  3. Re-run ERC (Inspect → Electrical Rules Checker). The violation disappears as soon as the name appears twice.

Use when: The label was supposed to connect to somewhere else. This is the case the check is for.

Change it to a local label

  1. Right-click the global label → Change to Label.
  2. Re-run ERC.

Use when: The label only ever needed to name or connect things on one sheet. A local label does that without claiming a schematic-wide connection, and the census only counts global labels.

When it’s safe to exclude

This check is opt-in — Ignore is the shipped default — so the honest framing is the reverse of most ERC pages: when should you turn it on? Enable it (Schematic Setup → Electrical Rules → Violation Severity → Connections) if your house style says global labels exist only to form cross-sheet pairs. It will catch typo'd and orphaned labels that Label not connected to anything misses: a typo'd global label sitting on a valid wire with pins is connected — to everything except its partner.

Once enabled, excluding individual markers (right-click → Exclude this violation) is reasonable for the deliberate single-use labels — a net named for layout or simulation. If you find yourself excluding most of what it reports, the default Ignore was right for you all along.

Gotchas

  • The census counts text, not connections. Two same-named global labels on the same wire satisfy the check while connecting nothing new. Don't silence a violation by stacking a second label next to the first; fix the actual missing end.
  • A typo produces two violations, not one. If the count of single_global_label markers is even, look for pairs of almost-equal names before anything else.
  • KiCad 9 also has a separate, connectivity-based check: "Global label not connected anywhere else in the schematic" (global_label_dangling, Warning by default). KiCad 10 dropped it; this census is what remains, so a KiCad 10 project wanting label hygiene has to enable it.

Version notes

  • KiCad 9.0: Check introduced in this release.
Minimal reproduction

Two minutes in the editor: wire two pins together, put a global label (Ctrl+L) named SPI_MISO on the wire, and don't use that name anywhere else. Enable the check first — Schematic Setup → Electrical Rules → Violation Severity → Connections → set "Global label only appears once in the schematic" to Warning — then run ERC (Inspect → Electrical Rules Checker). The label reports:

[single_global_label]: Global label only appears once in the schematic
    ; warning
    @(116.84 mm, 101.60 mm): Global Label 'SPI_MISO'

The checked-in file data/erc/samples/single_global_label.kicad_sch reproduces this with one SPI_MISO global label on a wire between two embedded one-pin symbols; the companion single_global_label.kicad_pro carries the severity override that turns the check on. The embedded symbols cost two lib_symbol_issues warnings about the missing repro library — an artifact of the self-contained repro, not part of this error. Adding a second SPI_MISO global label anywhere in the file drops the violation; renaming the second copy to SPI_MIS0 instead produces two violations, one per name.

FAQ

ERC reports one unused label when there are two — why?

Because this check counts names, not label instances. Two global labels sharing one name make that name appear twice, so neither is flagged even if both are unconnected; dangling ends are the job of "Label not connected to anything". Two labels with different names produce two separate violations.

How do I find all global labels that appear only once in my schematic?

Set "Global label only appears once in the schematic" to Warning in Schematic Setup → Electrical Rules → Violation Severity, then run ERC. Each single-occurrence name gets exactly one marker, at the label itself. This works in KiCad 9.0 and later; the check does not exist in KiCad 8.

Is it wrong to use a global label just to name a net?

No. A global label is the standard way to force a net name for the PCB editor, netclass rules, or SPICE, even when the net never leaves the sheet. KiCad ships this check at Ignore severity precisely so that single-use naming labels don't generate noise. Leave it at Ignore, or exclude the markers on the deliberate ones if you've enabled it.

Sources