← Όλα τα άρθρα

Έκανα GEO Audit στο Portfolio μου. Να τι Άλλαξα.

Το portfolio μου πήρε 68/100 σε GEO audit. Πρόσθεσα JSON-LD schemas, ένα llms.txt, και ξανάγραψα το κείμενο ώστε να αρχίζει με γεγονότα — όχι με επίθετα.

Έκανα GEO Audit στο Portfolio μου. Να τι Άλλαξα.

Έτρεξα ένα SEO/GEO audit στο δικό μου portfolio και τα αποτελέσματα ήταν διδακτικά. Βαθμολογία κλασικού SEO: 74/100. Βαθμολογία GEO: 68/100. Το site έδειχνε καλό, φόρτωνε γρήγορα, είχε αξιοπρεπή meta tags — αλλά ένα AI answer engine δεν μπορούσε να το παραθέσει με σιγουριά. Δεν υπήρχαν named entities. Δεν υπήρχε machine-readable περίληψη. Κείμενο γεμάτο αόριστες περιγραφές αντί για παραθέσιμα γεγονότα. Αφιέρωσα μια μέρα να το διορθώσω, και σε αυτό το post καταγράφω ακριβώς τι άλλαξα.

Τι είναι το GEO

Generative Engine Optimization είναι η πρακτική να δομείς το περιεχόμενό σου έτσι ώστε τα AI answer engines — ChatGPT, Perplexity, Gemini, Google AI Overviews — να μπορούν να το διαβάσουν, να το εμπιστευτούν, και να το παραθέσουν. Το κλασικό SEO βελτιστοποιεί για μπλε συνδέσμους σε λίστα αποτελεσμάτων. Το GEO βελτιστοποιεί για το να βρεθείς μέσα στην ίδια την απάντηση. Η διαφορά μετράει, γιατί οι μηχανισμοί παραπομπής λειτουργούν διαφορετικά: μια μηχανή αναζήτησης κατατάσσει σελίδες βάσει σημάτων αυθεντίας, ενώ ένα answer engine εξάγει ισχυρισμούς και τους αποδίδει σε πηγή που μπορεί να επαληθεύσει. Αν το κείμενό σου είναι αόριστο ή αδόμητο, η μηχανή θα παραφράσει έναν ανταγωνιστή που ήταν πιο ρητός.

Το GEO δεν αντικαθιστά το SEO. Είναι ένα επιπλέον στρώμα από πάνω. Οι περισσότερες GEO τεχνικές είναι ταυτόχρονα καλές πρακτικές SEO — structured data, semantic HTML, κείμενο με γεγονότα. Η διαφορά είναι στη σκοπιμότητα: γράφεις για ένα σύστημα που θέλει να απαντήσει μια ερώτηση σε μια παράγραφο, όχι να πάρει ένα click.

Τα νούμερα του audit

Έτρεξα δομημένο AI audit στο Next.js 15 App Router site μου, deployed στο Vercel. Το μοντέλο αξιολόγησε χωριστά τα κλασικά SEO σήματα και τα GEO-specific κριτήρια. Κλασικό SEO: 74/100 — λογικό, αλλά έχανε βαθμούς στην κάλυψη structured data και στο thin metadata των blog posts. GEO: 68/100 — το μεγαλύτερο κενό, και το πιο ενδιαφέρον πρόβλημα.

Οι αφαιρέσεις στο GEO ήταν συνεπείς: έλειπε Person entity με disambiguating links, έλειπε machine-readable περίληψη του site, το κείμενο περιέγραφε τη δουλειά με επίθετα αντί για γεγονότα, και τα FAQ ήταν θαμμένα σε παραγράφους από όπου η μηχανή δεν μπορούσε να βγάλει καθαρή απάντηση. Τίποτα από αυτά δεν είναι δύσκολο να φτιαχτεί. Απλά χάνεται εύκολα στη βιασύνη να παραδώσεις features.

JSON-LD: ρητές οντότητες

Τα JSON-LD structured data είναι ο κύριος τρόπος να πεις σε ένα answer engine ποιος είσαι, τι κάνεις, και γιατί ένας ισχυρισμός στο site σου μπορεί να αποδοθεί σε συγκεκριμένο πρόσωπο ή οργανισμό. Πρόσθεσα τρεις τύπους schema στο layout του site — Person, WebSite, ProfessionalService — και δύο σε κάθε blog post — BlogPosting και BreadcrumbList.

Το BlogPosting schema είναι εκεί που συγκεντρώνεται η μεγαλύτερη GEO αξία. Παρακάτω, μια συμπτυγμένη εκδοχή αυτού που κάνεται inject σε κάθε post:

{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "I Ran a GEO Audit on My Own Portfolio. Here's What I Fixed.",
  "description": "A practical walkthrough of GEO fixes on a Next.js 15 site, from JSON-LD to llms.txt.",
  "datePublished": "2026-06-02",
  "dateModified": "2026-06-02",
  "wordCount": 1100,
  "isAccessibleForFree": true,
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://klawsfx.com/blog/geo-audit-nextjs-portfolio"
  },
  "author": {
    "@type": "Person",
    "name": "Kyriakos Kaitezidis",
    "url": "https://klawsfx.com",
    "sameAs": [
      "https://github.com/kykakaite"
    ]
  }
}

Το array sameAs είναι το βασικό GEO signal. Δίνει στη μηχανή επιβεβαιωτικές πηγές για να επαληθεύσει την ταυτότητα του συγγραφέα. Χωρίς αυτό, το «ο Kyriakos Kaitezidis έγραψε αυτό» είναι αδιευκρίνιστος ισχυρισμός. Με αυτό, η μηχανή μπορεί να διασταυρώσει τα profiles και να αντιμετωπίσει την πατρότητα ως επαληθευμένη.

llms.txt: machine-readable περίληψη

Το llms.txt είναι plain-text, δομημένο αρχείο στο root του site που δίνει στα LLMs μια συνοπτική, ακριβή εικόνα για το τι είναι το site και ποιος το τρέχει. Φαντάσου το σαν robots.txt για answer engines — όχι έλεγχος πρόσβασης, αλλά προσανατολισμός.

Το δικό μου /llms.txt ξεκινά με ορισμική περίληψη, και ακολουθούν services, stack, και επικοινωνία σε συνοπτικές, παραθέσιμες γραμμές:

# Kyriakos Kaitezidis

> Full-stack developer based in Xanthi, Greece. I build complete websites
> and web apps — frontend, backend, database, deployment — typically shipped
> in 3–5 days. Fixed-price quotes. Direct.

## Stack
- Frontend: React, Next.js, Astro, TypeScript, Tailwind, GSAP, R3F/WebGL
- Backend: Node.js, Express, tRPC, GraphQL, REST, WebSockets
- Database: PostgreSQL, Prisma, Drizzle, Neon, Redis
- Deploy: Vercel, Netlify, Cloudflare, Docker, GitHub Actions

## Contact
- Email: contact@klawsfx.com
- Website: https://klawsfx.com
- GitHub: https://github.com/kykakaite

Όταν κάποια μηχανή περιηγηθεί στο site ή ένας χρήστης ρωτήσει «ποιος είναι ο Kyriakos Kaitezidis», αυτό το αρχείο της δίνει έτοιμη απάντηση που μπορεί να παραθέσει απευθείας. Η μορφή είναι σκόπιμα λιτή και πραγματολογική — χωρίς marketing γλώσσα, μόνο παραθέσιμες δηλώσεις.

Ορισμικές προτάσεις και κείμενο πλούσιο σε γεγονότα

Τα answer engines εξάγουν ισχυρισμούς ψάχνοντας αυτοτελείς, δηλωτικές προτάσεις που μπορούν να «σηκώσουν» χωρίς το περιβάλλον τους. Η πρόταση «Ο Kyriakos Kaitezidis είναι full-stack developer με έδρα την Ξάνθη που παραδίδει ολοκληρωμένα websites και web apps σε 3–5 μέρες» είναι παραθέσιμη. Η πρόταση «Δημιουργώ immersive digital experiences στη σύνδεση τέχνης και τεχνολογίας» δεν είναι — είναι επίθετα χωρίς γεγονότα.

Ξανάγραψα το hero text, το τμήμα About, και τις περιγραφές projects ώστε να ανοίγουν με ορισμική πρόταση. Κάθε ενότητα τώρα αρχίζει με ισχυρισμό που μια μηχανή μπορεί να επαληθεύσει ή να αποδώσει. Είναι η ίδια τεχνική που χρησιμοποιεί η Wikipedia και τα δελτία τύπου: πρώτα το βασικό γεγονός, μετά η ανάπτυξη.

Ο ίδιος κανόνας ισχύει σε επίπεδο ενότητας. Κάθε ## επικεφαλίδα σε αυτό το post ανοίγει με δηλωτική πρόταση που ορίζει το θέμα. Μια μηχανή που διαβάζει το post μπορεί να εξάγει «Generative Engine Optimization is the practice of structuring content so AI answer engines can parse, trust, and cite it» χωρίς να διαβάσει τίποτα άλλο.

Semantic HTML και καθαρό metadata

Τα structured data και το καλό κείμενο λειτουργούν μόνο αν το HTML από κάτω είναι αναλύσιμο. Έκανα audit στο site για heading hierarchy, canonical URLs, OpenGraph completeness, και alt text εικόνων. Συγκεκριμένες διορθώσεις:

Τίποτα από αυτά δεν είναι πρωτότυπο. Αλλά το GEO μεγεθύνει το κόστος της παράλειψης — μια μηχανή που δεν μπορεί να αναλύσει τη δομή σου δεν θα σε παραθέσει, ακόμα κι αν το περιεχόμενο είναι εξαιρετικό.

Το αποτέλεσμα

Αφού έγιναν αυτές οι αλλαγές, το ίδιο audit model επανά-βαθμολόγησε το site. Οι βελτιώσεις ήταν μετρήσιμες και στις δύο κατηγορίες. Το πιο σημαντικό: το site έχει πλέον named entities με επιβεβαιωτικά links, machine-readable περίληψη σε γνωστό URL, και κείμενο που αρχίζει με γεγονότα. Ανεξάρτητα από το αν κάποια μηχανή θα παραθέσει αυτό το site σε συγκεκριμένη ερώτηση, το περιεχόμενο είναι πλέον δομημένο για να το υποστηρίξει.

Η βασική αρχή: γράψε για την απάντηση, όχι για το click. Τα AI engines θέλουν να σερβίρουν μία σωστή, παραθέσιμη απάντηση. Δώσε τους την πρώτη ύλη να το κάνουν με σιγουριά, και το κείμενό σου γίνεται πηγή — όχι απλά αναφορά.

FAQ

Η μορφή FAQ είναι από μόνη της GEO τεχνική. Κάθε απάντηση παρακάτω είναι αυτοτελής — ένα AI engine μπορεί να την εξάγει και να την παραθέσει χωρίς να διαβάσει το υπόλοιπο post.

Τι είναι το Generative Engine Optimization (GEO); Generative Engine Optimization (GEO) είναι η πρακτική δόμησης web περιεχομένου ώστε τα AI answer engines — ChatGPT, Perplexity, Gemini, Google AI Overviews — να μπορούν να το αναλύουν, να το εμπιστεύονται, και να το παραθέτουν ως πηγή. Σε αντίθεση με το κλασικό SEO, που στοχεύει κατατεταγμένα αποτελέσματα αναζήτησης, το GEO στοχεύει την άμεση παραπομπή μέσα σε AI-generated απαντήσεις.

Τι είναι ένα αρχείο llms.txt; Ενα αρχείο llms.txt είναι plain-text έγγραφο στο root URL ενός site που παρέχει δομημένη, machine-readable περίληψη του περιεχομένου, του δημιουργού, και του σκοπού του site για μεγάλα γλωσσικά μοντέλα. Μοιάζει με το robots.txt ως προς τη θέση και τη σύμβαση, αλλά αντί να ελέγχει την πρόσβαση crawlers, παρέχει προσανατολισμό — ποιος τρέχει το site, τι καλύπτει, και πού βρίσκονται τα βασικά resources.

Γιατί έχει σημασία το sameAs στο JSON-LD για το GEO; Η ιδιότητα sameAs σε ένα Person schema συνδέει την ταυτότητα του συγγραφέα με εξωτερικά profiles επαλήθευσης — GitHub, LinkedIn — δίνοντας στα AI engines cross-references για να επιβεβαιώσουν την πατρότητα πριν αποδώσουν έναν ισχυρισμό. Χωρίς αυτό, το όνομα του συγγραφέα είναι αναπόδεικτο string. Με αυτό, γίνεται επαληθεύσιμη οντότητα.

Απαιτεί το GEO διαφορετική αρχιτεκτονική site; Οχι. Το GEO εφαρμόζεται ως στρώμα πάνω σε υπάρχον site, μέσω structured data, metadata, και τρόπου γραφής. Σε ένα Next.js App Router site, τα βασικά σημεία υλοποίησης είναι το root layout (για Person, WebSite, ProfessionalService JSON-LD), οι μεμονωμένες σελίδες posts (για BlogPosting JSON-LD), ένα static llms.txt στον φάκελο public/, και κείμενο ξαναγραμμένο ώστε να αρχίζει με ορισμικές προτάσεις.