EN
GR RU

Cyprus Property for Sale - Page 24

Experience the charm of properties nestled in Cyprus’s breathtaking landscapes, from verdant hillsides to pristine coastlines. These homes offer tranquility while keeping you connected to essential amenities and vibrant communities. Whether you’re searching for a serene retreat or a sound investment, the natural surroundings enhance the value and appeal of these properties, making them an excellent choice for buyers seeking beauty and functionality. Home › Cyprus Property for Sale › Page 24 document.addEventListener("DOMContentLoaded", function () { try { const pageUrl = location.href.split('#')[0]; const base = location.origin; const pageTitle = document.title || ""; const pageDesc = (document.querySelector('meta[name="description"]')?.content || "").trim(); // Πάρε τις κάρτες (νέο DOM) ή fallback (παλιό DOM) let cards = document.querySelectorAll(".result-card"); if (!cards || cards.length === 0) cards = document.querySelectorAll(".re_prop .col-xs-4"); const seen = new Set(); const itemList = []; cards.forEach((card, index) => { // ---- URL (ανθεκτικό: αγνοεί anchors, #myToggle, javascript:) let href = null; const links = Array.from(card.querySelectorAll('a[href]')); // δώσε προτεραιότητα σε a.hcaption, μετά σε h2>a, μετά στα υπόλοιπα links.sort((a, b) => { const aw = a.matches('a.hcaption') ? 0 : a.closest('h2') ? 1 : 2; const bw = b.matches('a.hcaption') ? 0 : b.closest('h2') ? 1 : 2; return aw - bw; }); for (const a of links) { const h = (a.getAttribute('href') || '').trim(); if (!h) continue; if (h[0] === '#') continue; // αγνόησε anchors (#myToggle κ.λπ.) if (/^javascript:/i.test(h)) continue; // αγνόησε javascript: if (/#myToggle/i.test(h)) continue; // αγνόησε ρητά #myToggle href = new URL(h, base).href; // absolute URL break; } // ---- τίτλος const h2 = card.querySelector("h2.prop-title, h2.prop-title-fixer, h2"); const name = (h2?.textContent || "").trim(); // ---- εικόνα const imgEl = card.querySelector("img"); let image = imgEl ? (imgEl.getAttribute("data-src") || imgEl.getAttribute("data-lazy") || imgEl.getAttribute("src")) : null; if (image) image = new URL(image, base).href; // ---- τιμή ως κείμενο (προαιρετικό) const priceText = (card.querySelector("p.prop-title-fixer")?.textContent || "") .replace(/\s+/g," ").trim(); if (href && name && !seen.has(href)) { seen.add(href); const li = { "@type": "ListItem", "position": index + 1, "url": href, "name": name }; if (image) li.image = image; if (priceText) li.description = priceText; itemList.push(li); } }); // JSON-LD (CollectionPage + ItemList) const graph = [ { "@type":"CollectionPage", "@id": pageUrl + "#webpage", "url": pageUrl, "name": pageTitle, "description": pageDesc }, { "@type":"ItemList", "@id": pageUrl + "#itemlist", "url": pageUrl, "name": pageTitle, "description": pageDesc, "numberOfItems": itemList.length, "itemListElement": itemList } ]; const s = document.createElement("script"); s.type = "application/ld+json"; s.text = JSON.stringify({ "@context":"https://schema.org", "@graph": graph }); document.head.appendChild(s); } catch(e) {} }); (function() { try { const currentUrl = window.location.href.split('#')[0]; const baseUrl = window.location.origin; const pageTitle = document.title; // Διορθωμένο: Αφαιρεί τον αριθμό στο τέλος του URL (π.χ. /2 ή /3) const categoryUrl = currentUrl.replace(/\/(\d+)$/, ''); const breadcrumbData = { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "Home", "item": baseUrl }, { "@type": "ListItem", "position": 2, "name": "Cyprus Property for Sale", "item": categoryUrl } ] }; // Διορθωμένο: Ελέγχει αν το URL τελειώνει σε /αριθμό if (/\/(\d+)$/.test(currentUrl)) { breadcrumbData.itemListElement.push({ "@type": "ListItem", "position": 3, "name": pageTitle, "item": currentUrl }); } const script = document.createElement('script'); script.type = 'application/ld+json'; script.text = JSON.stringify(breadcrumbData); document.head.appendChild(script); } catch (e) {} })(); ...read more