威海卫防御的弱点主要在陆路。甲午战争前,驻扎山东半岛沿海一带以拱卫威海后路的陆军共有24营2哨,总兵力12200人,但因海岸线绵长,分扎各处后则兵力分散。中日宣战后,虽经山东巡抚李秉衡极力整顿,总兵力扩充至60营,共约3万人,但因威海后路长约150公里,兵力分布各处,仍显得严重不足。
1895年1月20日拂晓,从大连湾出发的日军第一批运兵船19艘和海军运输船6艘在日本联合舰队13艘军舰的护航下抵达荣成湾。驻守此地的清军不足两营,在日舰猛烈的炮轰下溃退,日军顺利登陆,占领成山和荣成县城。25日,日军主力3万余人全部上岸。26日,日军分兵两路进犯威海卫,右纵队进攻威海南帮炮台,左纵队则配合右纵队切断南帮炮台清军退路,准备攻下南帮炮台后,再从后路抄袭威海卫城和北帮炮台,海军则配合陆军从海港正面进攻,企图一举攻占威海卫,全歼北洋舰队。
1月30日上午,日军右纵队向南岸炮台发起总攻,驻守清军顽强抵抗,停泊港内的“定远”等舰亦开炮助战,经激烈争夺,日军先攻占制高点摩天岭,接着占领南岸所有炮台。在这场争夺战中,清军伤亡2000余人,但日军同样付出重大代价,死伤228人,其陆军少将大寺安纯被击毙。与此同时,日军左纵队向南帮炮台外围清军发起攻击,占领威海南部交通孔道虎山,然后向北推进,与右纵队会合,切断从南帮炮台撤退下来的清军退路。此时已近正午,北洋舰队10余艘舰艇突然驶近南岸杨家滩附近,发起炮击。日军仓皇退逃,死38人,伤51人。日军慑于北洋舰队炮火威力,不敢沿海岸推进,改从西路迂回进攻。2月2日,日军攻占威海卫城,然后分兵进攻北帮炮台。驻守北帮炮台的6营清军已经溃散,威海陆军主将戴宗骞亦愧愤自尽。丁汝昌只得下令炸毁弹药库以免资敌。当天,日军占领北帮炮台。至此,日本陆军全占领南北海岸炮台,海军严密封锁威海港口,完成了对北洋舰队的陆海合围。