Ihr Makler vor Ort
Immobilienmakler in Halle, Leipzig und der Region
Als geprüfter Immobilienfachwirt und Sachverständiger betreue ich Eigentümer in über 70 Städten und Ortsteilen zwischen Halle und Leipzig — persönlich, vertraulich und ohne Druck.
Einzugsgebiet
Unsere Regionen
Direktkontakt
Ihr Ort nicht dabei? Ich bin trotzdem für Sie da.
Ich betreue Eigentümer in der gesamten Region zwischen Halle und Leipzig — auch wenn Ihr Ort nicht gelistet ist. Sprechen Sie mich einfach an.
Immobilienmakler in Naunhof bei Leipzig
Naunhof südöstlich von Leipzig ist ein staatlich anerkannter Erholungsort — und das spürt man. Grillensee und Albrechtshainer See bieten Naherholung direkt vor der Haustür. Einfamilienhäuser mit Seenähe, Ferienhäuser und Waldgrundstücke bilden ein besonderes Marktsegment. Für Naturliebhaber und Familien, die das Grüne suchen, ist Naunhof eine der attraktivsten Lagen im Leipziger Umland.
Lage-Profil
Über diesen Ort
Wichtige Adressen
Behörden & Ämter vor Ort
Häufige Fragen
Das sollten Sie wissen
Ihr Termin ist nur zwei Klicks entfernt
Buchen Sie Ihre kostenlose Erstberatung direkt online — oder rufen Sie mich an.
Büro Bahnhofstraße 35A, Kabelsketal
Weitere Orte
Nachbarschaft & verwandte Standorte
// GLOBAL STATE
let pageData = {};
let ortesData = {};
let behoerdenData = {};
let preismatrixData = {};
let makroData = {};
// GET URL PARAMETER
function getUrlParam(name) {
const params = new URLSearchParams(window.location.search);
return params.get(name);
}
// FORMAT PRICE
function formatPrice(val) {
return val.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}
// LOAD ALL DATA
async function loadAllData() {
const [ortes, behoerden, preismatrix, makro] = await Promise.allSettled([
fetch('/data/orte.json').then(r => r.ok ? r.json() : Promise.reject('orte ' + r.status)),
fetch('/data/behoerden.json').then(r => r.ok ? r.json() : Promise.reject('behoerden ' + r.status)),
fetch('/data/preismatrix.json').then(r => r.ok ? r.json() : Promise.reject('preismatrix ' + r.status)),
fetch('/data/makro.json').then(r => r.ok ? r.json() : Promise.reject('makro ' + r.status))
]);
if (ortes.status === 'fulfilled') ortesData = ortes.value;
else console.error('Fehler orte.json:', ortes.reason);
if (behoerden.status === 'fulfilled') behoerdenData = behoerden.value;
else console.error('Fehler behoerden.json:', behoerden.reason);
if (preismatrix.status === 'fulfilled') preismatrixData = preismatrix.value;
else console.error('Fehler preismatrix.json:', preismatrix.reason);
if (makro.status === 'fulfilled') makroData = makro.value;
else console.error('Fehler makro.json:', makro.reason);
}
// RENDER PAGE
function renderPage(slug) {
if (!ortesData[slug]) {
showError();
return;
}
pageData = ortesData[slug];
const region = pageData.region_slug || 'halle-saale';
const behoerdenKey = regionMapping[slug] || regionMapping[region] || 'halle';
// SEO
updateSEO(slug);
// BREADCRUMB
renderBreadcrumb();
// HERO
document.getElementById('page-h1').textContent = pageData.h1;
document.getElementById('page-desc').textContent = pageData.desc;
renderStats();
// PROFIL
renderProfil();
// MARKT
renderMarket();
// BEHÖRDEN
renderAuthorities(behoerdenKey);
// FAQ
renderFAQ();
// NEARBY
renderNearby();
// KARTE
renderMap();
// SHOW CONTENT
document.getElementById('page-content').style.display = '';
document.getElementById('error-container').style.display = 'none';
}
function updateSEO(slug) {
const baseUrl = '/orte/';
const title = `${pageData.h1} | Wohntraum Immobilien`;
const desc = (pageData.desc || '').substring(0, 160);
const lat = pageData.map_center ? pageData.map_center.split(',')[0] : '51.4414';
const lng = pageData.map_center ? pageData.map_center.split(',')[1] : '12.0458';
document.getElementById('page-title').textContent = title;
document.getElementById('page-description').setAttribute('content', desc);
document.getElementById('canonical-link').setAttribute('href', baseUrl + slug);
document.getElementById('og-title').setAttribute('content', title);
document.getElementById('og-description').setAttribute('content', desc);
document.getElementById('og-url').setAttribute('content', baseUrl + slug);
document.getElementById('geo-region').setAttribute('content', 'DE-ST');
document.getElementById('geo-placename').setAttribute('content', pageData.stadt || 'Halle');
document.getElementById('geo-position').setAttribute('content', `${lat};${lng}`);
document.getElementById('icbm').setAttribute('content', `${lat}, ${lng}`);
// UPDATE SCHEMA AGENT
const schemaAgent = JSON.parse(document.getElementById('schema-agent').textContent);
schemaAgent.areaServed = [{'@type': 'City', 'name': pageData.stadt || pageData.name}];
document.getElementById('schema-agent').textContent = JSON.stringify(schemaAgent);
}
function renderBreadcrumb() {
const bc = document.getElementById('breadcrumb');
bc.innerHTML = `
Start
→
Region
Blog
→
${pageData.stadt || pageData.region_slug}
→
${pageData.name}
`;
}
function renderStats() {
const profil = pageData.profil || {};
const statsHtml = `
${profil.einwohner || '–'} Einwohner
${profil.plz || '–'} PLZ
${profil.typ || '–'} Typ
`;
document.getElementById('page-stats').innerHTML = statsHtml;
}
function renderProfil() {
const profil = pageData.profil || {};
const highlights = pageData.highlights || {};
const highlightsList = Object.keys(highlights).map(h => `${h} `).join('');
const makroText = makroData[pageData.region_slug] || makroData[pageData.slug] || profil.makro || '';
const html = `
${profil.mikro || profil.makro || ''}
${highlightsList ? `${highlightsList}
` : ''}
${makroText}
`;
document.getElementById('profil-content').innerHTML = html;
}
function renderMarket() {
const priceKey = pageData.slug;
const price = preismatrixData[priceKey] || preismatrixData['default'] || 1450;
const marketText = pageData.markt || '';
document.getElementById('market-price').textContent = formatPrice(price);
document.getElementById('market-text').innerHTML = `${marketText}
`;
}
function renderAuthorities(behoerdenKey) {
const beh = behoerdenData[behoerdenKey];
if (!beh) {
document.getElementById('authorities-content').innerHTML = 'Behördendaten nicht verfügbar.
';
return;
}
let html = '';
['grundbuchamt', 'nachlassgericht', 'bauamt', 'rathaus'].forEach(key => {
const item = beh[key];
if (!item) return;
html += `
${item.name}
${item.str}
${item.plz}
${item.web ? `
` : ''}
`;
});
document.getElementById('authorities-content').innerHTML = html || 'Keine Einträge.
';
}
function renderFAQ() {
const faqs = pageData.faqs || {};
const entries = Object.entries(faqs).filter(([k, v]) => v && v.trim() !== '');
if (entries.length === 0) {
document.getElementById('faq-content').innerHTML = 'Keine FAQs verfügbar.
';
return;
}
// Pair entries positionally: index 0=Q, 1=A, 2=Q, 3=A ...
let html = '';
for (let i = 0; i < entries.length - 1; i += 2) {
const q = entries[i][1];
const a = entries[i + 1][1];
if (q && a) {
html += `
`;
}
}
if (html) {
document.getElementById('faq-content').innerHTML = html;
setupFAQAccordion();
updateFAQSchema();
}
}
function renderNearby() {
const nearby = pageData.nearby || {};
const nearbyKeys = Object.keys(nearby).filter(k => !k.includes(']'));
if (nearbyKeys.length === 0) {
document.getElementById('nearby-section').style.display = 'none';
return;
}
let html = '';
nearbyKeys.forEach(slug => {
const nearbyOrt = ortesData[slug];
if (nearbyOrt) {
const price = preismatrixData[slug] || preismatrixData['default'] || 1450;
html += `
${nearbyOrt.name}
${formatPrice(price)}€/m²
Mehr erfahren →
`;
}
});
if (html) {
document.getElementById('nearby-content').innerHTML = html;
document.getElementById('nearby-section').style.display = '';
}
}
function setupFAQAccordion() {
document.querySelectorAll('.wfq-q').forEach(q => {
q.addEventListener('click', function() {
const parent = this.parentElement;
document.querySelectorAll('.wfq').forEach(f => {
if (f !== parent) f.classList.remove('open');
});
parent.classList.toggle('open');
});
});
}
function updateFAQSchema() {
const faqItems = [];
document.querySelectorAll('.wfq').forEach(faq => {
const q = faq.querySelector('.wfq-q').textContent;
const a = faq.querySelector('.wfq-a').textContent;
faqItems.push({
'@type': 'Question',
'name': q,
'acceptedAnswer': {
'@type': 'Answer',
'text': a
}
});
});
const schemaFAQ = JSON.parse(document.getElementById('schema-faq').textContent);
schemaFAQ.mainEntity = faqItems;
document.getElementById('schema-faq').textContent = JSON.stringify(schemaFAQ);
}
function renderMap() {
const mapSection = document.getElementById('map-section');
const mapCenter = pageData.map_center;
if (!mapCenter) { mapSection.style.display = 'none'; return; }
const [lat, lng] = mapCenter.split(',').map(Number);
if (isNaN(lat) || isNaN(lng)) { mapSection.style.display = 'none'; return; }
mapSection.style.display = '';
// Wohntraum Büro Kabelsketal
const bueroLat = 51.4414, bueroLng = 12.0458;
const map = L.map('wmap', {
center: [lat, lng],
zoom: 14,
scrollWheelZoom: false,
zoomControl: true
});
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap ',
maxZoom: 18
}).addTo(map);
// Standort-Marker (Teal)
const tealIcon = L.divIcon({
className: '',
html: '
',
iconSize: [22, 22],
iconAnchor: [11, 11]
});
L.marker([lat, lng], {icon: tealIcon})
.addTo(map)
.bindPopup('' + (pageData.name || 'Standort') + ' ' + (pageData.stadt || ''));
// Einzugsgebiet (sanfter Teal-Kreis)
L.circle([lat, lng], {
radius: 1500,
color: '#0d9488',
fillColor: '#0d9488',
fillOpacity: 0.08,
weight: 1.5,
opacity: 0.3
}).addTo(map);
// Büro-Marker (Amber)
const bueroIcon = L.divIcon({
className: '',
html: '
',
iconSize: [18, 18],
iconAnchor: [9, 9]
});
L.marker([bueroLat, bueroLng], {icon: bueroIcon})
.addTo(map)
.bindPopup('Wohntraum Immobilien Bahnhofstraße 35A 06184 KabelsketalTermin buchen → ');
// Fit bounds wenn Büro weit weg
const dist = Math.sqrt(Math.pow(lat - bueroLat, 2) + Math.pow(lng - bueroLng, 2));
if (dist > 0.02) {
map.fitBounds([[lat, lng], [bueroLat, bueroLng]], { padding: [50, 50], maxZoom: 13 });
}
// Fix für Leaflet-Rendering in hidden containers
setTimeout(() => { map.invalidateSize(); }, 200);
}
// HAUPTSTANDORTE für die Übersichtsseite
const mainLocations = [
{ slug: 'halle', name: 'Halle (Saale)', desc: 'Kreisfreie Großstadt · 240.000 Einwohner · Universitätsstadt' },
{ slug: 'leipzig', name: 'Leipzig', desc: 'Kreisfreie Großstadt · 620.000 Einwohner · Wirtschaftszentrum' },
{ slug: 'merseburg', name: 'Merseburg', desc: 'Saalekreis · Domstadt · historische Altstadt' },
{ slug: 'kabelsketal', name: 'Kabelsketal', desc: 'Saalekreis · Bürostandort Wohntraum Immobilien' },
{ slug: 'landsberg', name: 'Landsberg', desc: 'Saalekreis · Wachstumsgemeinde bei Halle' },
{ slug: 'schkopau', name: 'Schkopau', desc: 'Saalekreis · Chemieindustrie · günstige Lagen' },
];
// REGIONEN MAPPING für die Gruppen
const regionGroups = [
{ label: 'Halle (Saale) & Stadtteile', prefix: 'halle' },
{ label: 'Leipzig & Stadtteile', prefix: 'leipzig' },
{ label: 'Saalekreis', keys: ['kabelsketal','landsberg','merseburg','leuna','salzatal','petersberg','teutschenthal','schkopau','braunsbedra','muecheln','querfurt','wettin-lobejun','bad-lauchstaedt','bad-duerrenberg','luetzen','saalekreis'] },
{ label: 'Burgenlandkreis', keys: ['naumburg','weissenfels','zeitz','hohenmolsen','teuchern','burgenlandkreis'] },
{ label: 'Landkreis Leipzig', keys: ['borna','grimma','wurzen','markkleeberg','markranstaedt','zwenkau','grosspoessel','brandis','naunhof','colditz','geithain','frohburg','kohren-sahlis','landkreis-leipzig'] },
{ label: 'Nordsachsen', keys: ['torgau','eilenburg','delitzsch','schkeuditz','bad-dueben','nordsachsen'] },
{ label: 'Anhalt-Bitterfeld & Dessau', keys: ['bitterfeld-wolfen','köthen','dessau-rosslau','zerbst','anhalt-bitterfeld'] },
];
function showOverview() {
document.getElementById('region-overview').style.display = '';
document.getElementById('page-content').style.display = 'none';
document.getElementById('error-container').style.display = 'none';
if (!ortesData || Object.keys(ortesData).length === 0) return;
// ÜBERSICHTSKARTE
const mainSlugs = new Set(['halle','leipzig','merseburg','kabelsketal','landsberg','schkopau','borna','torgau','naumburg','weissenfels','bitterfeld-wolfen']);
const mapEl = document.getElementById('overview-map');
if (mapEl && typeof L !== 'undefined') {
const ovMap = L.map('overview-map', {
center: [51.48, 11.98],
zoom: 9,
scrollWheelZoom: false,
zoomControl: true,
attributionControl: false
});
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 18
}).addTo(ovMap);
Object.entries(ortesData).forEach(([slug, data]) => {
if (!data.map_center) return;
const parts = data.map_center.split(',').map(Number);
if (parts.length !== 2 || isNaN(parts[0])) return;
const [lat, lng] = parts;
const isMain = mainSlugs.has(slug);
const color = isMain ? '#0d9488' : '#0f1724';
const size = isMain ? 14 : 9;
const border = isMain ? '#22b8a6' : 'rgba(34,184,166,.4)';
const icon = L.divIcon({
className: '',
html: `
`,
iconSize: [size, size],
iconAnchor: [size/2, size/2]
});
L.marker([lat, lng], {icon})
.addTo(ovMap)
.bindPopup(`${data.name || slug} `);
});
setTimeout(() => ovMap.invalidateSize(), 150);
}
// Hauptstandorte
const mainGrid = document.getElementById('overview-main-grid');
mainGrid.innerHTML = mainLocations
.filter(loc => ortesData[loc.slug])
.map(loc => `
${loc.name}
${loc.desc}
Mehr erfahren →
`).join('');
// Alle Orte nach Region gruppiert
const allGroupsEl = document.getElementById('overview-all-groups');
let html = '';
regionGroups.forEach(group => {
let entries = [];
if (group.prefix) {
entries = Object.entries(ortesData)
.filter(([slug]) => slug === group.prefix || slug.startsWith(group.prefix + '-'))
.sort((a, b) => a[1].name.localeCompare(b[1].name, 'de'));
} else if (group.keys) {
entries = group.keys
.filter(slug => ortesData[slug])
.map(slug => [slug, ortesData[slug]]);
}
if (entries.length === 0) return;
html += ``;
});
allGroupsEl.innerHTML = html;
}
function showError() {
const errorContainer = document.getElementById('error-container');
errorContainer.innerHTML = `
Ort nicht gefunden
Die angeforderte Seite existiert leider nicht. Bitte überprüfen Sie die URL oder wählen Sie einen anderen Ort.
Zurück zu den Regionen →
`;
errorContainer.style.display = '';
document.getElementById('page-content').style.display = 'none';
}
// INIT
document.addEventListener('DOMContentLoaded', async function() {
await loadAllData();
const ort = window.ORT_SLUG || getUrlParam('ort');
if (ort) {
renderPage(ort);
} else {
showOverview();
}
// MOBILE MENU
document.getElementById('wmo').addEventListener('click', function() {
document.getElementById('wmm').classList.add('open');
});
document.getElementById('wmx').addEventListener('click', function() {
document.getElementById('wmm').classList.remove('open');
});
document.querySelectorAll('.wmob a').forEach(function(a) {
a.addEventListener('click', function() {
document.getElementById('wmm').classList.remove('open');
});
});
// WHATSAPP DROPDOWN
const wwaBtn = document.getElementById('wwa-btn');
const wwaDd = document.getElementById('wwa-dd');
if (wwaBtn && wwaDd) {
wwaBtn.addEventListener('click', function(e) {
e.stopPropagation();
wwaDd.classList.toggle('open');
});
document.addEventListener('click', function() {
wwaDd.classList.remove('open');
});
wwaDd.addEventListener('click', function(e) {
e.stopPropagation();
});
}
});