Крепость предназначалась охранять владения Великого Новгорода на юго-западе. В 1200 метрах от каменной крепости, выше по течению Шелони, сохранилась ровная площадка, обнесенная земляным валом и рвом. С двух сторон она омывалась Шелонью и пересохшей ныне речкой Лубянкой. Этот мыс оказался очень удобным местом для возведения деревянной крепости: высота ее валов с внутренней стороны достигала 3 метров, а снаружи в древности они были еще выше. На этих валах порховичи и возвели деревянные стены при Александре Ярославиче, но, по народному преданию, оно уже давно было заселено славянами.
Первая военная гроза пронеслась над Порховом через столетие после основания города, когда его осадил литовский князь Ольгерд. Он «приехав с братьями, со всею литовскою силою, и взяша Шелону до Голинъ и Лугу до Сабля на щить, а с Порховского городка окуп взяша 300 рублей и 60 новгородских».
К началу XIV века Порхов превратился в пригород Великого Новгорода, и административно его жизнь походила на новгородскую: он имел свой торг, народное вече, свой суд, но без права выносить смертные приговоры без разрешения Новгорода. В отличие от других пограничных крепостей Порхов занимал наиболее видное место в обороне Новгорода. Удобное стратегическое положение на самой юго-западной границе, выгодное положение на торговом пути между Псковом и Новгородом выделяло город из ряда других крепостей на границе Новгородской республики. Поэтому новгородское вече постановило: «Построити город Порхов каменны».
Каменную крепость строили около 10 лет — с 1378 по 1387 год. Для возведения новых укреплений мастера выбрали очень удобный и живописный мыс, вокруг которого река Шелонь делает свой очередной изгиб. Крепость строили жители окрестных сел и деревень под руководством воеводы Ивана Федоровича — замечательного мастера и знатока военного зодчества, умело использовавшего природный рельеф местности. С юго-западной стороны была возведена неприступная стена; с северо-восточной, откуда более всего ожидалась осада, выстроили четыре высоких башни, которые в основании были совершенно разной формы. Малая башня была прямоугольная и значительно выступала с наружной стороны крепости: толщина ее стен равнялась приблизительно 1,4 метра. На каждой из трех ее наружных стен располагалось по три щелевидные бойницы, расширяющиеся вовнутрь.
На северо-восточной стороне крепости поднялась Никольская башня, под которой имеется проход под стену. В XVIII веке над башней надстроили колокольню. До настоящего времени лучше всего сохранилась Средняя башня, которая в плане имеет подковообразную форму. Она расположена в восточной части крепости, и толщина ее стен достигает 4 метров. А вот Псковская башня более 100 лет назад была подмыта полноводной тогда Шелонью и обрушилась, восстанавливать ее не стали.
В разные времена под стены каменного Порхова приходили многие завоеватели, но защитникам всякий раз удавалось отстоять свою землю. Только в начале XVII века, в период Русско-шведской войны, крепость была сдана шведам. После их ухода она утратила свое военное значение, и вокруг нее стал расти город.
С присоединением к Москве княжества Тверского и Великого Новгорода в 1485 году Великое княжество Московское превратилось в централизованное государство. Летом того же года Иван III стал именовать себя государем «всея Руси», заявляя тем самым претензии на господство над всеми русскими землями — в том числе и над теми, которые входили в состав Великого княжества Литовского. В последнее десятилетие XV века он попытался обрести выход к Балтийскому морю, без чего невозможно было установить прямые торговые связи с Западной Европой.
Большую опасность в те годы представляли для русских Швеция и Ливонский орден, поэтому на Балтике требовался порт для обороны земель, расширения торговли и создания собственного флота. И такой крепостью-портом на море, «которым опоясывается и замыкается земной круг», стал Ивангород. Место для новой крепости выбрали на крутой излучине реки Наровы — Девичьей горе, на которой в языческие времена собирались весной девушки и водили хороводы. Гора, уступами обрывающаяся к речным водам, весьма выгодно располагалась со стратегической точки зрения. Строгий четырехугольник с тремя приземистыми квадратными башнями по углам был врезан в высокий берег точным расчетом. Эти строгость и четкость были так же торжественно державны, как и слова летописи, отметившие появление нового города.
«В лето… прислал князь Иван Васильевич всея Руси воеводы своя и повелел поставить на рубеже близ моря Варяжского на устий Наровы город и нарече его в свое имя Ивангород; и оттоле пересташа немци ходить на Русь.»