{"id":9010,"date":"2025-10-24T14:11:19","date_gmt":"2025-10-24T14:11:19","guid":{"rendered":"https:\/\/www.windownation.com\/locations\/virginia\/"},"modified":"2026-09-17T21:32:18","modified_gmt":"2026-09-17T21:32:18","slug":"virginia","status":"publish","type":"nbly_state","link":"https:\/\/www.windownation.com\/locations\/virginia\/","title":{"rendered":"Virginia"},"content":{"rendered":"    <section class=\"wp-block-wn-state-intro\">\n        <div class=\"wn-state-intro-copy\">\n            <h1>Window Replacement Experts in Virginia<\/h1>\n            <div class=\"wn-state-intro-text\"><p>Virginia\u2019s humid summers and chilly winters make well-performing windows a valuable part of a comfortable home. If you\u2019re noticing drafts or ready for a new look, explore window replacement in Virginia with Window Nation. Updating older windows can help improve energy efficiency while preserving the character of a traditional Colonial or complementing a modern design. Find replacement window options that welcome natural light, enhance curb appeal, and help make your living spaces more enjoyable throughout the year.<\/p>\n<\/div>\n        <\/div>\n        <div class=\"wn-state-search\">\n            <form class=\"wn-state-search-form\" action=\"https:\/\/www.windownation.com\/locations\/\" method=\"get\">\n                <label for=\"wn-state-zip-1\">Find Your Local Window Nation:<\/label>\n                <input id=\"wn-state-zip-1\" name=\"zip\" type=\"text\" inputmode=\"numeric\" autocomplete=\"postal-code\" pattern=\"[0-9]{5}\" maxlength=\"5\" placeholder=\"Enter your zip code\" title=\"Please enter a 5-digit ZIP code.\" required>\n                <button class=\"primary-btn\" type=\"submit\">Search<\/button>\n                <p class=\"wn-state-search-status\" role=\"status\" aria-live=\"polite\"><\/p>\n            <\/form>\n        <\/div>\n    <\/section>\n    \n\n<section class=\"wp-block-wn-state-cities\"><h2>Cities Served in Virginia<\/h2><div class=\"wn-state-cities-layout\"><div class=\"wn-state-cities-list\"><ul><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/alexandria\/\">Alexandria<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/annandale\/\">Annandale<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/arlington\/\">Arlington<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/ashburn\/\">Ashburn<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/burke\/\">Burke<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/centreville\/\">Centreville<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/dale-city\/\">Dale City<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/fredericksburg\/\">Fredericksburg<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/herndon\/\">Herndon<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/lake-ridge\/\">Lake Ridge<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/leesburg\/\">Leesburg<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/lorton\/\">Lorton<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/manassas\/\">Manassas<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/mclean\/\">McLean<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/reston\/\">Reston<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/rose-hill\/\">Rose Hill<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/south-riding\/\">South Riding<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/springfield\/\">Springfield<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/stafford-courthouse\/\">Stafford Courthouse<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/sterling\/\">Sterling<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/west-springfield\/\">West Springfield<\/a><\/li><li><a href=\"https:\/\/www.windownation.com\/locations\/virginia\/woodbridge\/\">Woodbridge<\/a><\/li><\/ul><\/div><img class=\"wn-state-cities-image\" src=\"https:\/\/www.windownation.com\/locations\/wp-content\/plugins\/window-nation-blocks\/build\/state-cities\/assets\/cities-served-home.webp\" alt=\"Blue house with large illuminated windows at dusk\" width=\"640\" height=\"640\" loading=\"lazy\" decoding=\"async\"><\/div><\/section>\n\n\n<section class=\"wp-block-wn-mini-cta\"><div class=\"wn-block-container\"><div class=\"wn-mini-cta-content\"><h2>Save 50% on all windows<\/h2><p>And save even more with 0% interest for 60 months!<\/p><\/div><div class=\"wn-cta-buttons\">\n<div class=\"wp-block-wn-cta-button\"><a class=\"secondary-btn\" href=\"#request-quote\" data-quote-link=\"true\"><span>Get a Quote<\/span><\/a><\/div>\n<\/div><\/div><\/section>\n\n\n<section class=\"wp-block-nbly-locations-original wn-state-showrooms\"><h2>Window Nation Showrooms in Virginia<\/h2><div class=\"wn-block-container\"><div class=\"wp-block-nbly-locations-original-list\"><ul class=\"location-list\"><li class=\"location-item\">\n                <h4 class=\"location-title\">Window Nation Northern VA<\/h4>\n                <div class=\"wn-review-stars\">\n                <div class=\"wn-review-stars-container stars-full\" style=\"width:91px\">\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                    <span class=\"wn-review-star\">\u2605<\/span>\n                <\/div>\n                <div class=\"wn-review-stars-container stars-empty\">\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                    <span class=\"wn-review-star\">\u2606<\/span>\n                <\/div>\n            <\/div>\n                <p>\n                    8198 Terminal Road #105<br \/>\n                    Lorton, VA 22079<br \/>\n                    (703) 372-4540\n                <\/p>\n                <a class=\"primary-btn\" href=\"https:\/\/www.windownation.com\/locations\/district-of-columbia\/washington\/\">Learn More<\/a>\n                <a class=\"primary-btn call-us\" href=\"tel:7033724540\">Call Us&nbsp;<\/a>\n            <\/li><\/ul><\/div><div class=\"wp-block-nbly-locations-original-map\"><div id=\"map\" role=\"presentation\"><\/div>\n                    <script>\n                        (g=>{var h,a,k,p=\"The Google Maps JavaScript API\",c=\"google\",l=\"importLibrary\",q=\"__ib__\",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement(\"script\"));e.set(\"libraries\",[...r]+\"\");for(k in g)e.set(k.replace(\/[A-Z]\/g,t=>\"_\"+t[0].toLowerCase()),g[k]);e.set(\"callback\",c+\".maps.\"+q);a.src=`https:\/\/maps.${c}apis.com\/maps\/api\/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+\" could not load.\"));a.nonce=m.querySelector(\"script[nonce]\")?.nonce||\"\";m.head.append(a)}));d[l]?console.warn(p+\" only loads once. Ignoring:\",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({\n                            key: \"AIzaSyAgutGJdUeN8A3K5pre71IrumEAXexIeKI\",\n                            v: \"weekly\",\n                        });\n                    <\/script>\n                    <script src=\"https:\/\/unpkg.com\/@googlemaps\/markerclusterer\/dist\/index.min.js\"><\/script>\n                    <script>\n                        var map;\n                        async function initMap() {\n                            const { Map, InfoWindow } = await google.maps.importLibrary(\"maps\");\n                            const { AdvancedMarkerElement, PinElement } = await google.maps.importLibrary(\"marker\",);\n                            map = new google.maps.Map(document.getElementById(\"map\"), {\n                                zoom: 3,\n                                center: { lat: -28.024, lng: 140.887 },\n                                streetViewControl: false,\n                                fullscreenControl: false,\n                                mapTypeControl: false,\n                                mapId: \"fe7cac85af94d16c\",\n                            });\n                            \n                            const stateName = \"Virginia\";\n                            if (!stateName) map.addListener(\"idle\", () => {\n                                var bounds = map.getBounds();\n                                let markerList = [];\n                                for (var i = 0; i < markers.length; i++) {\n                                    if (bounds.contains(markers[i].position) === true) {\n                                        locations.map((location, j) => {\n                                            if (markers[i].zIndex == location.id) {\n                                                console.log(location.title + \" \" + location.phone);\n                                                markerList.push({title:markers[i].title, url:location.url, address:location.address, phone:location.phone, phone_formatted:location.phone_formatted, reviews:location.reviews});\n                                            }\n                                        });\n                                    }\n                                }\n                                nblyBuildList(markerList);\n                            });\n\n                            const infoWindow = new google.maps.InfoWindow({\n                                content: \"\",\n                                disableAutoPan: true,\n                            });\n                            \n                            const locations = [{\"id\":14,\"title\":\"Window Nation Northern VA\",\"address\":\"8198 Terminal Road #105\\u003Cbr \\\/\\u003ELorton, VA 22079\",\"phone\":\"7033724540\",\"phone_formatted\":\"(703) 372-4540\",\"url\":\"https:\\\/\\\/www.windownation.com\\\/locations\\\/district-of-columbia\\\/washington\\\/\",\"lat\":38.704,\"lng\":-77.228,\"reviews\":\"\\u003Cdiv class=\\u0022wn-review-stars\\u0022\\u003E\\n                \\u003Cdiv class=\\u0022wn-review-stars-container stars-full\\u0022 style=\\u0022width:91px\\u0022\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2605\\u003C\\\/span\\u003E\\n                \\u003C\\\/div\\u003E\\n                \\u003Cdiv class=\\u0022wn-review-stars-container stars-empty\\u0022\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                    \\u003Cspan class=\\u0022wn-review-star\\u0022\\u003E\\u2606\\u003C\\\/span\\u003E\\n                \\u003C\\\/div\\u003E\\n            \\u003C\\\/div\\u003E\"}]\n                            const markers = locations.map((position, i) => {\n                                const markerImg = document.createElement(\"img\");\n                                markerImg.src = \"https:\/\/www.windownation.com\/locations\/wp-content\/themes\/window-nation\/brands\/wn\/images\/map-view.svg\";\n                                markerImg.setAttribute(\"height\", \"30px\");\n                                markerImg.setAttribute(\"width\", \"30px\");\n                                const _marker = new google.maps.LatLng(position.lat, position.lng); \n                                const marker = new google.maps.marker.AdvancedMarkerElement({\n                                    position: _marker,\n                                    content: markerImg,\n                                    title: position.title,\n                                    zIndex: position.id\n                                });\n\n                                marker.addListener(\"gmp-click\", () => {\n                                    infoWindow.setContent(\"<div class='modal-body'><div class='modal-heading'>\" + position.title + \"<\/div><div class='modal-text'>\" + position.address + \"<\/div><div class='modal-cta'><a href='tel:\" + position.phone + \"'>\" + position.phone_formatted + \"<\/a><a href='\" + position.url + \"'>Learn More<\/a><\/div><\/div>\");\n                                    infoWindow.open(map, marker);\n                                    map.setCenter(marker.position);\n                                });\n                            \n                                return marker;\n                            });\n\n                            const svg = window.btoa(`<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"32\" width=\"32\"><circle class=\"c\" cx=\"16\" cy=\"16\" r=\"14\" fill=\"none\" stroke=\"#005BA7\" stroke-width=\"3\"\/><circle class=\"d\" cx=\"16\" cy=\"16\" r=\"5\" fill=\"#005BA7\" stroke=\"#005BA7\" stroke-width=\"10\"\/><\/svg>`);\n                            const renderer = {\n                                render: ({ count, position }) =>\n                                    new google.maps.Marker({\n                                        label: { text: String(count), color: \"#ffffff\", fontSize: \"13px\", fontWeight: \"600\" },\n                                        icon: {\n                                            url: `data:image\/svg+xml;base64,${svg}`,\n                                            scaledSize: new google.maps.Size(32, 32),\n                                        },\n                                        position,\n                                        zIndex: Number(google.maps.Marker.MAX_ZINDEX) + count,\n                                    })\n                            };\n\n                        const markerCluster = new markerClusterer.MarkerClusterer({ markers, map, renderer });\n\n                        let bounds = new google.maps.LatLngBounds();\n                        locations.forEach(function(LatLng) {\n                            bounds.extend(LatLng);\n                        });\n                        \n                        if (locations.length) map.fitBounds(bounds);\n                        if (markers.length == 1 && !stateName)\n                            map.setOptions({maxZoom: 9});\n                        if (stateName) {\n                            const stateBounds = {\"east\":-75.2443,\"north\":39.4649,\"south\":36.5402,\"west\":-83.6733};\n                            if (stateBounds) {\n                                map.fitBounds(stateBounds, 24);\n                            } else if (locations.length === 1) {\n                                map.setZoom(8);\n                            }\n                        }\n                        }\n\n                        initMap().then(() => {\n                            const zip = new URLSearchParams(window.location.search).get(\"zip\") || \"\";\n                            if (!\"Virginia\" && \/^[0-9]{5}$\/.test(zip)) {\n                                jQuery(() => {\n                                    jQuery(\"#location-search\").val(zip);\n                                    jQuery(\".nbly-do-find-location\").trigger(\"click\");\n                                });\n                            }\n                        });\n\n                        function nblyBuildList(markerList) {\n                            let list_contents = \"\";\n                            for (var i = 0; i < markerList.length; i++) {\n                                list_contents = list_contents + nblyBuildListItem(markerList[i]);\n                            }\n                            jQuery(\".location-list\").html(list_contents);\n                            if (markerList.length == 1) { \n                                jQuery(\".location-total-text span\").html(markerList.length + \" location found\");\n                            } else {\n                                jQuery(\".location-total-text span\").html(markerList.length + \" locations found\");\n                            }\n                        }\n\n                        function nblyBuildListItem(obj) {\n                            return \"<li class='location-item'><h4 class='location-title'>\" + obj.title + \"<\/h4> \" + obj.reviews + \"<p>\" + obj.address + \"<br \/>\" + obj.phone_formatted + \"<\/p><a class='primary-btn' a href='\" + obj.url + \"'>Learn More<\/a><\/li>\";\n                        }\n                    <\/script><\/div><\/div><\/section>\n\n    <section class=\"wp-block-wn-schedule-service wp-block-wn-schedule-service--landing\">\n        <div class=\"service-form-container\">\n            <div class=\"service-form\">\n                                    <h2>Get Your Free Estimate<\/h2>\n                                                <form class=\"wn-schedule-service-form\" name=\"homepageForm\" id=\"wn-schedule-service-2\" data-msevent=\"form_submitted\" data-mscategory=\"form_submitted\" data-msaction=\"form submission\" data-thank-you-url=\"\">\n                    <div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-first-name\">First Name*<\/label>\n                            <input type=\"text\" id=\"wn-schedule-service-2-first-name\" data-wn=\"req-first-name\" placeholder=\"First Name*\" autocomplete=\"given-name\" maxlength=\"30\" pattern=\"[A-Za-z]+\" required>\n                        <\/div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-last-name\">Last Name*<\/label>\n                            <input type=\"text\" id=\"wn-schedule-service-2-last-name\" data-wn=\"req-last-name\" placeholder=\"Last Name*\" autocomplete=\"family-name\" maxlength=\"50\" pattern=\"[A-Za-z]+\" required>\n                        <\/div>\n                    <\/div>\n                    <div>\n                        <div class=\"form-wide\">\n                            <label for=\"wn-schedule-service-2-email\">Email*<\/label>\n                            <input type=\"email\" id=\"wn-schedule-service-2-email\" data-wn=\"req-email\" placeholder=\"Email*\" autocomplete=\"email\" inputmode=\"email\" required>\n                        <\/div>\n                    <\/div>\n                    <div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-phone\">Phone Number*<\/label>\n                            <input type=\"tel\" id=\"wn-schedule-service-2-phone\" data-wn=\"req-phone\" placeholder=\"Phone Number*\" autocomplete=\"tel\" inputmode=\"tel\" maxlength=\"14\" required pattern=\"\\([0-9]{3}\\) [0-9]{3}-[0-9]{4}\" title=\"Please enter a 10-digit phone number.\">\n                        <\/div>\n                        <div>\n                            <label for=\"wn-schedule-service-2-postal-code\">ZIP Code*<\/label>\n                            <input type=\"text\" id=\"wn-schedule-service-2-postal-code\" data-wn=\"req-postal-code\" placeholder=\"ZIP Code*\" autocomplete=\"postal-code\" inputmode=\"numeric\" maxlength=\"5\" required pattern=\"[0-9]{5}\" title=\"Please enter a 5-digit ZIP code.\">\n                        <\/div>\n                    <\/div>\n                                            <label class=\"service-form-consent\">\n                            <input type=\"checkbox\" name=\"consent\" required>\n                            <span>By submitting this form, you are giving your express written consent without obligation for Window Nation to contact you regarding our services using e-mail, phone, or text, including automated technology for calls and\/or texts to the mobile number(s) provided. For more details, including how to opt out, read our <a href=\"https:\/\/www.windownation.com\/privacy-policy\" target=\"_blank\">privacy policy<\/a>.<\/span>\n                        <\/label>\n                                        <button type=\"submit\" class=\"primary-btn wn-schedule-service\" title=\"Submit\">Submit<\/button>\n                                    <\/form>\n            <\/div>\n            <div class=\"service-form-success\">\n                <h2>Thank you for contacting us!<\/h2>\n                <p><\/p>\n            <\/div>\n        <\/div>\n    <\/section>\n    ","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9010","nbly_state","type-nbly_state","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/9010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state"}],"about":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/types\/nbly_state"}],"author":[{"embeddable":true,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/comments?post=9010"}],"version-history":[{"count":2,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/9010\/revisions"}],"predecessor-version":[{"id":41142,"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/nbly_state\/9010\/revisions\/41142"}],"wp:attachment":[{"href":"https:\/\/www.windownation.com\/locations\/wp-json\/wp\/v2\/media?parent=9010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}