EN
GR RU

Cyprus Property for Sale - Page 30

Make Cyprus your home with properties designed for permanent living. From sleek apartments in urban centers to charming houses in serene neighborhoods, these homes combine modern comfort with practicality. Enjoy the Mediterranean lifestyle, with excellent amenities, vibrant local culture, and year-round sunshine, making every day feel like a dream come true. Home › Cyprus Property for Sale › Page 30 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