Die Inhaltsanalyse zeigt, ob Seitentitel, Beschreibungen, Überschriften, Bilder und Textstruktur Suchmaschinen und Besuchern klare Signale geben.
Seitentitel
DJ F.A.B. – Just fabulous
Länge : 31
Bei djfab.ch wirkt der Seitentitel stimmig: 31 Zeichen sind lang genug für eine aussagekräftige Formulierung und bleiben zugleich innerhalb des empfohlenen Rahmens von 10 bis 70 Zeichen.
Seitenbeschreibung
Länge : 0
djfab.ch hat aktuell keine Seitenbeschreibung. Eine individuelle Description sollte den wichtigsten Inhalt der Seite kurz zusammenfassen und kann die Darstellung in Suchergebnissen verbessern. Mit diesem kostenlosen Werkzeug lässt sich eine passende Beschreibung vorbereiten.
Suchbegriffe
djfab.ch nutzt keine META-Suchbegriffe. Der wichtigste SEO-Faktor bleibt der sichtbare Inhalt, aber ergänzende Keywords können bei der Pflege und Dokumentation der Seite hilfreich sein. Bei Bedarf können Sie dieses kostenlose Werkzeug verwenden.
Og META Eigenschaften
Für djfab.ch wurden keine OG Properties erkannt. Eigene Open-Graph-Daten helfen, Titel, Beschreibung und Bild beim Teilen der Seite besser zu steuern. Mit diesem kostenlosen Werkzeug lassen sich passende OG-Angaben erstellen.
Überschriften
H1
H2
H3
H4
H5
H6
2
1
1
0
0
0
[H1] International References
[H1] Impressions
[H2] Subscribe to Our NewsletterEnter your email address to receive all news from our awesome website.","container_class":"","element_class":"","key":"html_1533704338188","drawerDisabled":false,"id":5,"beforeField":"","afterField":"","value":"Subscribe to Our NewsletterEnter your email address to receive all news from our awesome website.","label_pos":"above","parentType":"html","element_templates":["html","input"],"old_classname":"","wrap_template":"wrap"},{"objectType":"Field","objectDomain":"fields","editActive":false,"order":999,"type":"email","label":"Your email address","key":"your_email_address_1533704633645","label_pos":"hidden","required":1,"default":"","placeholder":"Enter your email address","container_class":"four-sixths first","element_class":"","admin_label":"","help_text":"","custom_name_attribute":"email","personally_identifiable":1,"disable_browser_autocomplete":1,"drawerDisabled":false,"id":6,"beforeField":"","afterField":"","value":"","parentType":"email","element_templates":["email","input"],"old_classname":"","wrap_template":"wrap"},{"objectType":"Field","objectDomain":"fields","editActive":false,"order":999,"type":"submit","label":"Subscribe","processing_label":"Processing","container_class":"one-fourth last ","element_class":"","key":"subscribe_1533704695914","drawerDisabled":false,"id":7,"beforeField":"","afterField":"","value":"","label_pos":"above","parentType":"textbox","element_templates":["submit","button","input"],"old_classname":"","wrap_template":"wrap-no-label"}];nfForms.push(form);
.buy{ display:none !important;}
.rating{ right:10px !important;}
.ttw-music-player{ background:transparent; !important;}
.ttw-music-player .tracklist, .ttw-music-player .buy, .ttw-music-player .description, .ttw-music-player
.player .title, .ttw-music-player .artist, .ttw-music-player .artist-outer {
color:#ffffff; !important;
}
/**
* Originally created by 23rd and Walnut for Codebasehero.com, then modified for WordPress plugin by Enigma Digital
* www.23andwalnut.com
* www.codebasehero.com
* www.enigmaweb.com.au
* License: MIT License
*/
(function($) {
$.fn.ttwMusicPlayer = function(playlist, userOptions) {
var $self = this, defaultOptions, options, cssSelector, appMgr, playlistMgr, interfaceMgr, ratingsMgr, playlist,
layout, ratings, myPlaylist, current;
cssSelector = {
jPlayer: "#jquery_jplayer",
jPlayerInterface: '.jp-interface',
playerPrevious: ".jp-interface .jp-previous",
playerNext: ".jp-interface .jp-next",
trackList:'.tracklist',
tracks:'.tracks',
track:'.track',
trackRating:'.rating-bar',
trackInfo:'.track-info',
rating:'.rating',
ratingLevel:'.rating-level',
ratingLevelOn:'.on',
rating_succes:'.rating-succes',
title: '.title',
duration: '.duration',
buy:'.buy',
buyNotActive:'.not-active',
playing:'.playing',
moreButton:'.more',
player:'.player',
artist:'.artist',
artistOuter:'.artist-outer',
albumCover:'.img',
description:'.description',
descriptionShowing:'.showing'
};
defaultOptions = {
ratingCallback:null,
currencySymbol:'$',
buyText:'BUY',
tracksToShow:5,
autoplay:false,
jPlayer:{}
};
options = $.extend(true, {}, defaultOptions, userOptions);
myPlaylist = playlist;
current = 0;
appMgr = function() {
playlist = new playlistMgr();
layout = new interfaceMgr();
layout.buildInterface();
playlist.init(options.jPlayer);
//don't initialize the ratings until the playlist has been built, which wont happen until after the jPlayer ready event
$self.bind('mbPlaylistLoaded', function() {
$self.bind('mbInterfaceBuilt', function() {
ratings = new ratingsMgr();
});
layout.init();
});
};
playlistMgr = function() {
var playing = false, markup, $myJplayer = {},$tracks,showHeight = 0,remainingHeight = 0,$tracksWrapper, $more;
markup = {
listItem:'' +
'' +
'' +
'' +
'',
ratingBar:''
};
function init(playlistOptions) {
$myJplayer = $('.ttw-music-player .jPlayer-container');
var jPlayerDefaults, jPlayerOptions;
jPlayerDefaults = {
swfPath: "jquery-jplayer",
supplied: "mp3, oga",
solution:'html, flash',
cssSelectorAncestor: cssSelector.jPlayerInterface,
errorAlerts: false,
warningAlerts: false
};
//apply any user defined jPlayer options
jPlayerOptions = $.extend(true, {}, jPlayerDefaults, playlistOptions);
$myJplayer.bind($.jPlayer.event.ready, function() {
//Bind jPlayer events. Do not want to pass in options object to prevent them from being overridden by the user
$myJplayer.bind($.jPlayer.event.ended, function(event) {
playlistNext();
});
$myJplayer.bind($.jPlayer.event.play, function(event) {
$myJplayer.jPlayer("pauseOthers");
$tracks.eq(current).addClass(attr(cssSelector.playing)).siblings().removeClass(attr(cssSelector.playing));
});
$myJplayer.bind($.jPlayer.event.playing, function(event) {
playing = true;
});
$myJplayer.bind($.jPlayer.event.pause, function(event) {
playing = false;
});
//Bind next/prev click events
$(cssSelector.playerPrevious).click(function() {
playlistPrev();
$(this).blur();
return false;
});
$(cssSelector.playerNext).click(function() {
playlistNext();
$(this).blur();
return false;
});
$self.bind('mbInitPlaylistAdvance', function(e) {
var changeTo = this.getData('mbInitPlaylistAdvance');
if (changeTo != current) {
current = changeTo;
playlistAdvance(current);
}
else {
if (!$myJplayer.data('jPlayer').status.srcSet) {
playlistAdvance(0);
}
else {
togglePlay();
}
}
});
buildPlaylist();
//If the user doesn't want to wait for widget loads, start playlist now
$self.trigger('mbPlaylistLoaded');
playlistInit(options.autoplay);
});
//Initialize jPlayer
$myJplayer.jPlayer(jPlayerOptions);
}
function playlistInit(autoplay) {
current = 0;
if (autoplay) {
playlistAdvance(current);
}
else {
playlistConfig(current);
$self.trigger('mbPlaylistInit');
}
}
function playlistConfig(index) {
current = index;
$myJplayer.jPlayer("setMedia", myPlaylist[current]);
}
function playlistAdvance(index) {
playlistConfig(index);
if (index >= options.tracksToShow)
showMore();
$self.trigger('mbPlaylistAdvance');
$myJplayer.jPlayer("play");
}
function playlistNext() {
var index = (current + 1 < myPlaylist.length) ? current + 1 : 0;
playlistAdvance(index);
}
function playlistPrev() {
var index = (current - 1 >= 0) ? current - 1 : myPlaylist.length - 1;
playlistAdvance(index);
}
function togglePlay() {
if (!playing)
$myJplayer.jPlayer("play");
else $myJplayer.jPlayer("pause");
}
function buildPlaylist() {
var $ratings = $();
$tracksWrapper = $self.find(cssSelector.tracks);
//set up the html for the track ratings
for (var i = 0; i < 10; i++)
$ratings = $ratings.add(markup.ratingBar);
for (var j = 0; j < myPlaylist.length; j++) {
var $track = $(markup.listItem);
//since $ratings refers to a specific object, if we just use .html($ratings) we would be moving the $rating object from one list item to the next
$track.find(cssSelector.rating).html($ratings.clone());
$track.find(cssSelector.title).html(trackName(j));
$track.find(cssSelector.duration).html(duration(j));
setRating('track', $track, j);
setBuyLink($track, j);
$track.data('index', j);
$tracksWrapper.append($track);
}
$tracks = $(cssSelector.track);
$tracks.slice(0, options.tracksToShow).each(function() {
showHeight += $(this).outerHeight();
});
$tracks.slice(options.tracksToShow, myPlaylist.length).each(function() {
remainingHeight += $(this).outerHeight();
});
if (remainingHeight > 0) {
var $trackList = $(cssSelector.trackList);
$tracksWrapper.height(showHeight);
$trackList.addClass('show-more-button');
$trackList.find(cssSelector.moreButton).click(function() {
$more = $(this);
showMore();
});
}
$tracks.find('.title').click(function() {
playlistAdvance($(this).parents('li').data('index'));
});
}
function showMore() {
if (isUndefined($more))
$more = $self.find(cssSelector.moreButton);
$tracksWrapper.animate({height: showHeight + remainingHeight}, function() {
$more.animate({opacity:0}, function() {
$more.slideUp(function() {
$more.parents(cssSelector.trackList).removeClass('show-more-button');
$more.remove();
});
});
});
}
function duration(index) {
return !isUndefined(myPlaylist[index].duration) ? myPlaylist[index].duration : '-';
}
function setBuyLink($track, index) {
if (!isUndefined(myPlaylist[index].buy)) {
$track.find(cssSelector.buy).removeClass(attr(cssSelector.buyNotActive)).attr('href', myPlaylist[index].buy).html(buyText(index));
}
}
function buyText(index) {
return (!isUndefined(myPlaylist[index].price) ? options.currencySymbol + myPlaylist[index].price : '') + ' ' + options.buyText;
}
return{
init:init,
playlistInit:playlistInit,
playlistAdvance:playlistAdvance,
playlistNext:playlistNext,
playlistPrev:playlistPrev,
togglePlay:togglePlay,
$myJplayer:$myJplayer
};
};
ratingsMgr = function() {var $tracks = $self.find(cssSelector.track);
//Handler for when user hovers over a rating
$(cssSelector.rating).find(cssSelector.ratingLevel).hover(function() {
$(this).addClass('hover').prevAll().addClass('hover').end().nextAll().removeClass('hover');
});
//Restores previous rating when user is finished hovering (assuming there is no new rating)
$(cssSelector.rating).mouseleave(function() {
$(this).find(cssSelector.ratingLevel).removeClass('hover');
});
function bindEvents() {
$(cssSelector.rating_succes).css('display','none');
//Set the new rating when the user clicks
$(cssSelector.ratingLevel).click(function() {
var $this = $(this), rating = $this.parent().children().index($this) + 1, index;
var trackname = $(cssSelector.title+':first').text();
var postdata1 = 'action=my_special_ajax_call5&rating='+rating+'&trackname='+trackname;
//alert(postdata1);
jQuery.ajax({
type:'POST',
url:ajaxurl,
cache:false,
data: postdata1,
beforeSend:function(){
},
success:function(res){
$(cssSelector.rating_succes).html(res).fadeIn(500).delay(1000).fadeOut(500);
//window.setTimeout(function(){location.reload()},2000);
}
});
$this.prevAll().add($this).addClass(attr(cssSelector.ratingLevelOn)).end().end().nextAll().removeClass(attr(cssSelector.ratingLevelOn));
});
}
bindEvents();};
interfaceMgr = function() {
var $player, $title, $artist, $albumCover;
function init() {
$player = $(cssSelector.player),
$title = $player.find(cssSelector.title),
$artist = $player.find(cssSelector.artist),
$albumCover = $player.find(cssSelector.albumCover);
setDescription();
$self.bind('mbPlaylistAdvance mbPlaylistInit', function() {
setTitle();
setArtist();
setRating('current', null, current);
setCover();
});
}
function buildInterface() {
var markup, $interface;
//I would normally use the templating plugin for something like this, but I wanted to keep this plugin's footprint as small as possible
markup = '' +
'' +
'' +
'' +
' ' +
' ' +
' ' +
' ' +
' By ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' Already rated' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
'' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' ' +
' View More...' +
' ' +
' ' +
'';
$interface = $(markup).css({display:'none', opacity:0}).appendTo($self).slideDown('slow', function() {
$interface.animate({opacity:1});
$self.trigger('mbInterfaceBuilt');
});
}
function setTitle() {
$title.html(trackName(current));
}
function setArtist() {
if (isUndefined(myPlaylist[current].artist))
$artist.parent(cssSelector.artistOuter).animate({opacity:0}, 'fast');
else {
$artist.html(myPlaylist[current].artist).parent(cssSelector.artistOuter).animate({opacity:1}, 'fast');
}
}
function setCover() {
$albumCover.animate({opacity:0}, 'fast', function() {
if (!isUndefined(myPlaylist[current].cover)) {
var now = current;
if(now == current)
$albumCover.css({opacity:1}).html('');
}
});
}
function setDescription() {
if (!isUndefined(options.description))
$self.find(cssSelector.description).html(options.description).addClass(attr(cssSelector.descriptionShowing)).slideDown();
}
return{
buildInterface:buildInterface,
init:init
}
};
/** Common Functions **/
function trackName(index) {
if (!isUndefined(myPlaylist[index].title))
return myPlaylist[index].title;
else if (!isUndefined(myPlaylist[index].mp3))
return fileName(myPlaylist[index].mp3);
else if (!isUndefined(myPlaylist[index].oga))
return fileName(myPlaylist[index].oga);
else return '';
}
function fileName(path) {
path = path.split('/');
return path[path.length - 1];
}
function setRating(type, $track, index) {if (type == 'track') {
if (!isUndefined(myPlaylist[index].rating)) {
applyTrackRating($track, myPlaylist[index].rating);
}
}
else {
//if the rating isn't set, use 0
var rating = !isUndefined(myPlaylist[index].rating) ? Math.ceil(myPlaylist[index].rating) : 0;
applyCurrentlyPlayingRating(rating);
}
}
function applyCurrentlyPlayingRating(rating) {
//reset the rating to 0, then set the rating defined above
$self.find(cssSelector.trackInfo).find(cssSelector.ratingLevel).removeClass(attr(cssSelector.ratingLevelOn)).slice(0, rating).addClass(attr(cssSelector.ratingLevelOn));
}
function applyTrackRating($track, rating) {
//multiply rating by 2 since the list ratings have 10 levels rather than 5
$track.find(cssSelector.ratingLevel).removeClass(attr(cssSelector.ratingLevelOn)).slice(0, rating * 2).addClass(attr(cssSelector.ratingLevelOn));
}
/** Utility Functions **/
function attr(selector) {
return selector.substr(1);
}
function runCallback(callback) {
var functionArgs = Array.prototype.slice.call(arguments, 1);
if ($.isFunction(callback)) {
callback.apply(this, functionArgs);
}
}
function isUndefined(value) {
return typeof value == 'undefined';
}
appMgr();
};
})(jQuery);
(function($) {
// $('img.photo',this).imagesLoaded(myFunction)
// execute a callback when all images have loaded.
// needed because .load() doesn't work on cached images
// mit license. paul irish. 2010.
// webkit fix from Oren Solomianik. thx!
// callback function is passed the last image to load
// as an argument, and the collection as `this`
$.fn.imagesLoaded = function(callback) {
var elems = this.filter('img'),
len = elems.length;
elems.bind('load',
function() {
if (--len ' + data.settings.title + '
[H3] Ready for your next Party?
Bilder
Es konnten 14 Bilder auf dieser Webseite gefunden werden.
Die Bilder von djfab.ch sollten nachgearbeitet werden: 10 ALT-Attribute fehlen. Sinnvolle ALT-Texte erklären, was auf den Bildern zu sehen ist, und machen den Inhalt robuster für SEO und Barrierefreiheit.
Text/HTML Verhältnis
Anteil : 6%
Das Text-zu-HTML-Verhältnis von djfab.ch liegt nur bei 6% und damit unter dem empfohlenen Mindestwert von 15%. Mehr eigener, sichtbarer Inhalt würde der Seite helfen, ihr Thema klarer zu vermitteln.
Flash
Auf djfab.ch wurde kein Flash gefunden. Das ist positiv, weil moderne Browser und Suchmaschinen mit aktuellen HTML-, CSS- und JavaScript-Lösungen deutlich besser umgehen.
IFrame
Auf djfab.ch wurden IFrames gefunden. Eingebettete Inhalte können für Suchmaschinen schwerer einzuordnen sein und sollten nur dort eingesetzt werden, wo sie wirklich notwendig sind.
SEO Links
Eine klare Linkstruktur erleichtert Suchmaschinen das Crawlen, verteilt interne Relevanz und hilft Besuchern, wichtige Inhalte schnell zu finden.
URL Rewrite
Die URLs von djfab.ch sind gut lesbar und wirken suchmaschinenfreundlich. Sprechende Links helfen Nutzern und Crawlern, den Inhalt einer Seite bereits anhand der Adresse besser einzuschätzen.
Underscores in the URLs
In den URLs von djfab.ch wurden keine Unterstriche gefunden. Bindestriche sind für lesbare Webadressen meist die bessere Wahl.
In-page links
We found a total of 7 links including 0 link(s) to files
Die Suchbegriffsauswertung zeigt, welche Themen die Seite tatsächlich vermittelt und ob wichtige Begriffe in Inhalt und Seitenelementen konsistent vorkommen.
Gute Benutzerfreundlichkeit stärkt Vertrauen und erleichtert die Nutzung. Geprüft werden unter anderem URL, Favicon, Sprache und Druckdarstellung.
URL
Domain : djfab.ch
Länge : 8
Favoriten Icon
djfab.ch stellt ein Favicon bereit. Dieses kleine Symbol verbessert Wiedererkennung in Browser-Tabs, Lesezeichen und Suchergebnisumgebungen.
Druckeigenschaften
Für djfab.ch wurden keine speziellen Druck-CSS-Angaben gefunden. Eigene Print-Styles können helfen, Navigation, Farben und Layout beim Drucken sinnvoll zu reduzieren.
Sprache
Die Spracheinstellung von djfab.ch ist vorhanden: en. Diese Angabe macht das Dokument für Crawler und assistive Technologien klarer interpretierbar.
Dublin Core
djfab.ch verzichtet auf Dublin-Core-Metadaten. Falls die Seite stark dokumenten- oder publikationsorientiert ist, könnten solche Angaben ergänzt werden.
Dokument
Sauberes HTML, eine korrekte Zeichencodierung und moderne Standards verbessern Kompatibilität, Zugänglichkeit und die zuverlässige Verarbeitung der Seite.
Doctype
HTML 5
Verschlüsselung
djfab.ch deklariert den Zeichensatz UTF-8. Das ist wichtig, damit Sonderzeichen, Umlaute und typografische Zeichen korrekt dargestellt werden.
W3C Validität
Fehler : 0
Warnungen : 0
E-Mail Datenschutz
djfab.ch sollte offen sichtbare E-Mail-Adressen absichern. Eine geschützte Darstellung verringert die Wahrscheinlichkeit automatisierter Spam-Erfassung. Mit diesem kostenlosen Werkzeug lassen sich Adressen besser schützen.
Veraltetes HTML
djfab.ch verwendet keine überholten HTML-Tags in den geprüften Inhalten. Das spricht für eine zeitgemäße technische Basis.
Tipps zur Webseitengeschwindigkeit
Bei djfab.ch wurden keine verschachtelten Tabellen erkannt. Das ist positiv für sauberes Markup und responsive Gestaltung.
Auf djfab.ch wurden Inline-CSS-Angaben gefunden. Wenn möglich, sollten diese Regeln in Stylesheets verlagert werden, damit Gestaltung und Inhalt sauberer getrennt sind.
djfab.ch bindet 9 CSS-Dateien ein und liegt damit über dem empfohlenen Richtwert von 8. Eine Zusammenfassung oder Bereinigung kann Anfragen reduzieren.
djfab.ch verwendet 14 JavaScript-Dateien und liegt damit über dem Richtwert von 12. Weniger Skripte oder gebündelte Dateien können die Ladezeit verbessern.
djfab.ch nutzt gzip-Komprimierung. Dadurch können HTML, CSS und JavaScript kleiner übertragen werden, was die Ladezeit verbessern kann.
Mobile
Mobile Optimierung ist wichtig, weil viele Besucher Smartphones nutzen. Viewport, Icons und ungeeignete Technologien beeinflussen Darstellung und Bedienbarkeit.
Mobile Optimierung
Apple Icon
META Viewport Tag
Flash Inhalt
Optimierung
Sitemap, robots.txt, Komprimierung und Analysesysteme beeinflussen, wie effizient eine Website gecrawlt, ausgeliefert und gezielt weiterentwickelt werden kann.
XML-Sitemap
djfab.ch stellt eine XML-Sitemap bereit. Das hilft Suchmaschinen, wichtige URLs schneller zu entdecken und Änderungen strukturierter zu erfassen.
https://djfab.ch/wp-sitemap.xml
Robots.txt
http://djfab.ch/robots.txt
djfab.ch enthält eine robots.txt-Datei. Damit lassen sich Crawler-Regeln und der Hinweis auf die Sitemap zentral steuern.
Analytics
djfab.ch nutzt ein Analyse-Tool. Dadurch lassen sich Besucherinteraktionen messen und Optimierungen auf realen Nutzungsdaten aufbauen.
Google Analytics
PageSpeed Insights
PageSpeed Insights bewertet Leistung, Barrierefreiheit, bewährte Verfahren und SEO für Desktop und Mobilgeräte und macht technische Bremsen sichtbar.
Gerät
Kategorien
Website-Überprüfung
Website-Überprüfung ist ein kostenloses SEO Werkzeug zur Analyse Ihrer Webseite