Meine Präsentation von der SEOCampixx2021 zum Thema "Einstieg in XPath für SEO" stellt die Grundlagen von XPath und deren Anwendung in verschiedenen Tools vor, um gängige Fragen aus dem SEO-Alltag zu beantworten.
Textform unter: https://www.seoseb.de/artikel/texte/xpath-fur-seo-ein-einstieg/
2. XML
Auszeichnungssprache
gut strukturiert
besteht aus Nodes
haben immer ein öffnendes und ein schließendes Tag
Nodes können verschachtelt sein
Eltern → Kinder
Geschwister
haben Eigenschaften (Attribut="Wert")
haben Inhalte (= Text Nodes)
Wikipedia-Artikel zu XML
2
3. XML
<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.google.com/schemas/sitemap/0.9"> <!-- root node -->
<url> <!-- child node -->
<loc>https://www.sparkasse.de/</loc> <!-- child node mit text node -->
<lastmod>2019-05-31</lastmod> <!-- silbling node -->
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>https://www.sparkasse.de/fehlerseite/testseit_startseite.html</loc>
<lastmod>2018-03-27</lastmod>
<changefreq>daily</changefreq>
<priority>0.5</priority>
</url>
</urlset>
→ HTML* funktioniert ähnlich
* HTML5 ist ein vollwertiger XML Dialekt
3
4. Xpath
Expression Language für XML-Dokumente
gedacht um Teile eines XML Dokumentes zu adressieren
"Path" → Pfad-Ausdruck wird genutzt um Elemente
auszuwählen (z.B.: /Element1/Element2/Element3 )
kann auch auf HTML-Dokumente angewendet werden
4
8. Xpath
Abfragen laufen immer entlang der Dokumentenstruktur
<element1>
<kind1>
inhalt_1
</kind1>
<kind2 eigenschaft="wert">
inhalt_2
</kind2>
</element1>
Finde den Inhalt von kind2 innerhalb von element1 !
/element1/kind2
Ergebnis:
inhalt_2
8
9. XML & Xpath sind sehr
strikt
ist die HTML-Struktur nicht top, kann die Xpath-Abfrage
fehlschlagen
Case sensitive ( <div> ist nicht gleich <DIV> )
daher: vorher testen (gleich mehr dazu)
9
10. XPath & HTML
Was steht im Title?
Welche Bilder gibt es auf der Seite?
Welche Links auf externe Domains gibt es?
Wann wurde der Artikel veröffentlicht?
…
10
11. Basics, mit denen du schon recht weit kommst
Ausdruck Funktion Beispiel
/
wählt den
Wurzelknoten aus →
absoluter Pfad
/html/head
//
alle Knoten im
Dokument, die (die
darauffolgende)
Bedingung erfüllen
//p
[@ ] wählt Attribute aus
//p[@class]
//p[@class='content_text']
/..
wählt das
Elternelement des
zuvor selektierten
Knotens
//a[@rel='ugc']/..
11
12. Was, wenn ich die genaue Struktur nicht kenne?
Finde den Inhalt von kind2 innerhalb von irgendeinem Eltern-
Element!
<element1>
<kind1>
inhalt_1
</kind1>
<kind2 eigenschaft="wert">
inhalt_2
</kind2>
</element1>
Xpath: //kind2
Ergebnis: inhalt_2
12
13. aus dem SEO Alltag
//title
//h1
//h2
//meta[@name='description']/@content
//link[@rel='preconnect']/@href
13
14. Positionen in einer Reihe
//kind[5] = Nr. 5
//kind[last()] = Letztes Kind
//kind[last()-1] = Vorletztes Kind
//kind[position()<3] = alle Kinder vor Position 3
14
15. Anwendung
im Browser, Dev Console (direkt am HTML Dokument)
Chrome Addon XPather
Firefox Addon Try Xpath
Webanwendung, besonders praktisch zum Testen von
Schnipseln
xpather.com
Excel (SEO Tools for Excel)
Google Spreadsheets
Screaming Frog SEO Spider (Custom Exctraction, Custom
Search)
15
16. im Browser
nicht zu empfehlen:
/html/body/main/div[4]/div[1]/div[2]/div/div/div[5]/div/a/img
funktioniert nur bei exakt gleicher Struktur
Browser 16
17. im Browser
ideal zum Kennenlernen der Seite und zum Testen an
verschiedenen Templates, vor der tatsächlichen Anwendung
1. Seite öffnen
2. DevTools öffnen ( F12 / STRG + SHIFT + I )
3. Konsole in den DevTools öffnen ( ESC , oder im oberen Menü)
Browser 17
20. im Browser
in der Browser-Konsole werden XPath-Abfragen wie folgt verpackt:
$x("XPATH_AUSDRUCK")
immer doppelte Anführungszeichen!
sonst Probleme bei Text [@rel='canonical']
Browser 20
23. im Browser
Browser geben alle Objekte zurück, die auf die Abfrage
passen, inkl. der Browser internen Eigenschaften
kann anstrengend sein & Vorteile bringen
Browser 23
30. Excel
Seo Tools for Excel
=XPathOnUrl(url, xpath, attribute, xmlHttpSettings, mode)
wenn ein bestimmtes Attribut gesucht wird, kann es mit dem
attribute Argument abgefragt werden
=XPathOnUrl(url, "//a[@rel='canonical']", "href")
Excel 30
32. Excel
kein JS Rendering
viele Abfragen lähmen Excel (vorher testen)
Zellbezug macht Serienabfragen extrem einfach
Bsp.: 1. URLs aus Sitemap → 2. Xpath auf URLs
Excel 32
33. Screaming Frog SEO Spider
große Zahl an (ggf. unbekannten) URLs verarbeiten
Extraktion von Inhalten mit Xpath
Suche nach Inhalten mit Xpath
Excel Export
Screaming Frog 33
36. Search
sucht nach Text oder RegEx im Quelltext
Einschränkung der Suche auf bestimmte Elemente durch
Xpath
Bsp.: Nach Änderung, den Text im CTA prüfen
Screaming Frog 36
37. Und nun?
Crawldaten nachträglich in Excel anreichern
in Screaming Frog filtern, ob bestimmt Elemente enthalten
sind
Über Google Spreadsheets Inhalte von Wettbewerbern
scrapen (ohne Crawler)
IT hat XY implementeirt - ist XY auch überall vorhanden?
Strukturierte Daten - alles da?
Wettbewerbs-Seiten untersuchen
…
37
38. Vorgehen
1. suche das betreffende Element im Quelltext
2. geh so tief wie möglich in der Struktur
i. verlasse dich nicht auf "Kopieren: Xpath"
ii. schau nach Attributen id="xy" oder rel="xy"
iii. nutze unbedingt einfache Anführungszeichen ' innerhalb
der Ausdrücke und doppelte " für den Xpath
iv. probiere Varianten in der Console oder auf xpather.com
v. strebe den kürzest möglichen, relativen Pfad an
3. teste den Xpath erst an 2 oder 3 URLs in Excel, Spreadsheets
oder Screaming Frog
i. probiere "inner HTML" und "extract HTML Element" aus
4. frei
38
41. Featured Snippet?
<div>
<div> ultra viel gedöns (u.a. das Bild)</div>
<div class="mod"> Featured Snippet Text</div>
<div class="g">Title + URL mit Link</div>
</div>
//*[@class='mod']/..
41
47. Haben wir überall unsere Teaserboxen
gepflegt?
Wieviele Teaserboxen gibt es?
Fehlt hier ein Link?
welche Seiten werden verlinkt?
47
48. mögliche XPath-Anweisungen & -Funktionen:
count(//*[contains(@class,'if6_teaserarea')]//a/@href)=3
"true" wenn 3 Elemente vorhanden, sonst "false"(Search)
count(//*[contains(@class,'if6_teaserarea')]//a/@href)
zählt die Elemente, gibt Anzahl zurück (Extraction: Function
Value)
//*[contains(@class,'if6_teaserarea')]//a/@href
gibt Ziel-URLs zurück (Extraction: Text)
Screaming Frog SEO Spider 48
49. Es gibt noch so viel mehr:
Achsen
Funktionen
Berechnungen
49
50. Cheat Sheet Tools
Seo Tools For Excel
Deutsch ; ist Englisch ,
zu extrahierender Inhalt kann optional angegeben werden
=XpathOnUrl("http://www.web.de/";"//*[@rel='canonical']";"href")
Google Spreadsheet
=IMPORTXML("http://www.web.de/","//*[@rel='canonical']/@href")
Browser Console
$x("//*[@rel='canonical']/@href")
50
51. Cheat Sheet Xpath
übergeordnetes Element - zum "Hangeln"
//*[@rel='canonical']/..
Bedingung: "enthält"
//a[contains(@href,'http://')]/@href
negierte Bedingung: "beginnt nicht mit"
//a[not(starts-with(@href,'https'))]
Abfragen kombinieren
//a[contains(@href,'http://')] | //*[contains(@href,'s-immo.de')]
51
52. Elemente an ihrer Position ansprechen
/buch/kapitel[2]/abschnitt[4]/absatz[17]
Div finden, wenn es mehrere Klassennamen hat
<div class="first react-container usw-usf">
//div[contains(concat(' ',normalize-space(@class),' '),' react-container ')]
Elemente und deren Eigenschaften auf der Browser Console in
einer Tabelle ausgeben
table($x("//img[@alt]"), ['alt', 'width', 'height'])
52
54. Seo Tools for Excel
https://seotoolsforexcel.com/xpathonurl/
Excel
(Excel für Microsoft 365, Excel 2019, Excel 2016, Excel 2013)
https://support.microsoft.com/de-de/office/xmlfiltern-funktion-
4df72efc-11ec-4951-86f5-c1374812f5b7
54