사용자 입력의 기본 단위. 한 줄 텍스트, 숫자, 이메일, 비밀번호, 체크박스, 라디오, 파일 — 거의 모든 단일 줄 입력이 input. 22가지 type이 각각 다른 의미와 동작.
SEO 관점에서 input 자체가 ranking factor는 아니다. 다만 모바일 친화 폼이 모바일 SEO 신호. type=email이면 @ 키 자동 노출, type=tel이면 숫자 키패드 — 이런 적절한 type이 모바일 사용성을 만든다.
GEO 관점에서 AI 자동 폼 입력의 핵심. 어느 칸이 이메일, 어느 칸이 카드 번호인지 — type + name + autocomplete의 삼각형이 결정. 세 신호가 모두 명시되면 거의 100% 정확. type=text만 박힌 폼은 OCR로 placeholder를 추측 → 정확도 떨어짐.
A11y 관점에서 스크린리더의 발화 정확도가 type에 따라 결정. type=email이면 "이메일 입력", type=tel이면 "전화번호 입력". 일관된 한국어 발화가 사용자에게 어떤 형식으로 입력해야 하는지 단서.
자주 보는 안티패턴: type=text 그대로(모바일 키보드 비효율, autocomplete 무효), type=number를 카드 번호·전화번호에(maxLength 안 먹음, 휠 스크롤로 값 변경, 하이픈 입력 불가 — 카드 번호는 text + inputmode=numeric이 정답 — 시리즈 #11), autocomplete 누락(AI 자동 입력 정확도 떨어짐), label 누락(시리즈 #2 — 폼 a11y의 critical 결함).
22가지 type 결정 — 시리즈 #11에서 다룬 결정 트리. 이메일 → email, 전화번호 → tel, URL → url, 숫자(계산용) → number, 식별 코드(카드·우편번호) → text + inputmode=numeric, 검색 → search, 비밀번호 → password.
required·pattern·min·max — native 검증 속성. JS 검증 라이브러리(react-hook-form, Zod)와 함께 쓸 때는 noValidate로 native 끄고 라이브러리 검증에 일원화. 다만 native 속성 자체는 autofill·접근성에 영향이 있어 그대로 두는 경우도 흔하다.
name 속성 — 폼 제출 시 키. 서버가 email=...&password=... 같은 query string의 키로 받음. React에서 controlled form일 때는 onChange handler로 처리하지만 — name은 form 제출 fallback과 브라우저 autofill의 매칭 키로 여전히 중요.
체크박스·라디오의 input — type=checkbox, type=radio. 시리즈 #2 fieldset/legend 카드와 결합. 여러 라디오를 같은 그룹으로 묶을 때 같은 name과 fieldset/legend가 필수.